ABV.UNICODE.SELF_MAP
缓冲区溢出 — 失败的映射函数中超出边界的数组索引
ABV.UNICODE.SELF_MAP 可检查失败的 MultiByteToWideChar 和 WideCharToMultiByte 映射函数中引起的缓冲区溢出状况。通常,当映射函数的源指针和目标指针相同时,该检查器便会检测到错误状况。
有关 MultiByteToWideChar 和 WideCharToMultiByte 映射函数的详细信息,请参阅 MSDN 网站。
漏洞与风险
如果未正确使用这些映射函数,将导致缓冲区溢出,从而威胁应用程序的安全。为避免在将来发生这种状况,请务必为缓冲区接收的数据类型指定适合的缓冲区大小。
漏洞代码示例
复制
int
foo(void *src, int size) {
WideCharToMultiByte(CP_ACP, 0, (wchar_t)src, -1, src, size, 0, 0);
MultiByteToWideChar(CP_ACP, 0, src, -1, src, 30);
}
在此示例中,Klocwork 为第 3 行和第 4 行生成了一条消息,指出源指针和目标指针不能相同。该检查器已找到导致缓冲区溢出状况的失败的 WideCharToMultiByte 和 MultiByteToWideChar 映射函数。
相关检查器
外部指导
扩展
此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 C/C++ 分析。