缓冲区溢出或误报?

时间:2011-08-10 21:00:15

标签: winapi buffer-overflow false-positive

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

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

引用:如果缓冲区太小而无法容纳模块名称,则字符串将截断为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静态分析仪提供。

1 个答案:

答案 0 :(得分:2)

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

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