☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

不同的字符串类型之间不可直接转换

12.12 ID_charWCharCast
目录 › next › previous

char* 和 wchar_t* 直接转换并不进行字符集转换,属于语言运用错误,char*、wchar_t*、char16_t* 以及 char32_t* 之间均不可直接转换。

本规则是 ID_castNoInheritance 的特化。

示例:

wchar_t* to_unicode(char* str) {
    return (wchar_t*)str;          // Remarkably brave, but totally wrong
}

示例代码显然是错误的,应改用 iconv、MultiByteToWideChar 等字符集编码转换函数。

由于 unsigned char* 一般针对二进制数据,unsigned char* 与其他字符串类型之间的转换可不受本规则约束,但 char* 不应作为二进制数据的类型,参见 ID_plainBinaryChar。

相关

ID_castNoInheritance ID_plainBinaryChar

参考

CWE-704 SEI CERT STR38-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.