2

getmodulefilenamew 函数产生误报(缓冲区溢出),因为它接受第二个参数作为缓冲区 - 在我们的例子中是固定大小的。

但查看其文档:http: //msdn.microsoft.com/en-us/library/ms683197%28v=vs.85%29.aspx

Quote: 如果缓冲区太小而无法容纳模块名称,则字符串将被截断为 nSize 个字符,包括终止空字符,函数返回 nSize,并且函数将最后一个错误设置为 ERROR_INSUFFICIENT_BUFFER。

作为受信任的第三方的人可以确认或拒绝这个问题作为误报吗?谢谢你的帮助!

===

HMODULE applicationModule = GetModuleHandleW(NULL);
WCHAR processName[MAX_PATH];
memset(processName, 0, sizeof(processName));
GetModuleFileNameW(applicationModule, processName, sizeof(processName));

===

问题与 GetModuleFileNameW 函数一致

扫描由 Veracode 静态分析器提供。

4

1 回答 1

2

您的问题是您传递的值不正确nSize。您正在传递字节数,但您应该传递字符数,MAX_PATH. 这些值不同,因为宽字符的大小为 2 个字节。

所以,是的,您的代码中有错误。如果模块名称足够长,Windows 将尝试将最多 520 个字符写入一个只有 260 个空间的缓冲区。

于 2011-08-10T21:12:29.123 回答