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 映射函数。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。

扩展

此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 C/C++ 分析。