Mot*_*tti 13 c++ bstr visual-c++ static-code-analysis
由于BSTR只是typedef对wchar_t*我们的代码库,其中字符串文字传递给方法的几个(许多?)的地方期待BSTR这可以胡来了marshallers或任何人谁尝试使用任何BSTR特定的方法(比如SysStringLen).
有没有办法静态检测这种滥用?
我尝试使用VC10 /Wall和静态代码分析Microsoft All Rules进行编译,但是以下任何一个代码都没有被其中任何一个标记.
void foo(BSTR str)
{
std::cout << SysStringLen(str) << std::endl;
}
int _tmain()
{
foo(L"Don't do that");
}
Run Code Online (Sandbox Code Playgroud)
更新:在试图破坏wtypes.h我已经放弃的这些违法行为之后.
我尝试了两条路径,这两条路径都是我上面的示例程序,但是一旦我尝试了一个真正的项目,它们就失败了.
BSTR但是由于一个VARIANT有一个BSTR联合成员的类,新类不能有任何构造函数或赋值运算符,这个被破坏的每个地方都NULL被视为一个BSTR.我尝试NULL用具有转换运算符的类型替换但在添加了几十个新运算符(比较,转换等)之后,我开始遇到模糊的调用而放弃了.BSTR使用typedef另一种类型的指针).这也没有用,在添加toBSTR和fromBSTR乱丢comutil.h(_bstr_t)和其他转换的地方之后,我终于到了编译器在IDL生成的标题处被阻塞的点(默认值被转换为文字宽字符串).总之,如果有人知道一个代码分析工具可以帮助我很高兴听到它,我已经放弃了尝试自己实现这个目标.
| 归档时间: |
|
| 查看次数: |
1247 次 |
| 最近记录: |