【发布时间】:2010-12-08 09:13:11
【问题描述】:
无法通过搜索找到答案(可能是错误的关键字),所以我正在创建一个新问题。
您如何处理带有字符串参数的 dllexported 方法的参数检查。一般规则是永远不要信任用户,但实际上呢?例如:
int foo(const char *bar)
{
if(!bar)
return FAIL;
???
}
假设库的用户像这样调用我们的函数:
foo(reinterpret_cast<char*>(0x00000008));
这应该首先导致 AV:
strlen(bar);
有没有办法防止这种情况发生?处理错误的正确方法?
我知道 IsBadReadPtr 是不可能的,因为这个函数属于危险类并且永远不会被使用。但是有没有办法我应该并且可以处理这个问题?我不能 __declpec(dllexport) std::string,可以吗?此外,即使我愿意,据我所知,std::string 具有某种线程本地存储或静态,当从不同模块使用时会导致访问冲突(由静态或不同的堆引起?)。
使用这些函数是否存在安全风险、堆栈溢出 (R/E)IP 覆盖,还是只会导致安全的 AV?
【问题讨论】:
-
我看不出
std::string会如何防范此类事情。您仍然可以将无效指针传递给其构造函数。 -
@visitor 用户会在“他们的”代码中得到错误。