从 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
此规则指示从字节字符串 (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"
) 以将其定义为宽字符字符串。
参考资料¶
一般资源:std::mbstowcs
Microsoft 特定资源:安全注意事项:国际化功能
通用弱点枚举:CWE-704.