CodeQL 文档

从 char* 转换为 wchar_t*

ID: cpp/incorrect-string-type-conversion
Kind: problem
Security severity: 8.8
Severity: error
Precision: high
Tags:
   - security
   - external/cwe/cwe-704
Query suites:
   - cpp-code-scanning.qls
   - cpp-security-extended.qls
   - cpp-security-and-quality.qls

单击以在 CodeQL 代码库中查看查询

此规则指示从字节字符串 (char *) 到宽字符字符串 (wchar_t *) 的潜在不正确强制转换。

此强制转换可能会生成未正确终止的字符串;包括在将此类字符串与某些危险的 API 一起使用时可能发生的缓冲区溢出。

建议

不要显式地将字节字符串强制转换为宽字符字符串。

对于字符串文字,在文字字符串前面添加字母“L”以指示该字符串是宽字符字符串 (wchar_t *)。

要将字节文字转换为宽字符字符串文字,您需要使用适用于您所使用平台的相应转换函数。请参阅参考资料部分以了解根据您的平台的选项。

示例

在以下示例中,字节字符串文字 ("a") 被强制转换为宽字符字符串。

wchar_t* pSrc;

pSrc = (wchar_t*)"a"; // casting a byte-string literal "a" to a wide-character string

要解决此问题,请在文字前面添加字母“L” (L"a") 以将其定义为宽字符字符串。

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私