CXX.CAST.SIGNED_CHAR_TO_INTEGER

CXX.CAST.SIGNED_CHAR_TO_INTEGER 检查器会标记有符号字符型被赋值成或转换为更大的有符号整型的情况。

漏洞与风险

意外结果包括负值。

缓解与预防

在将有符号字符型转换为更大的整型大小之前,必须先将其转换为无符号字符型。

漏洞代码示例

复制
  void fun()
  {
      char *c_str="Welcome";
      unsigned char u_ch='K';
      int c;
      char ch = 'A';
 
      long var = ch;
 
     c = *c_str++;

     c = ch;

     if (c == *c_str);

     if (ch <= c);
 }

在此不符合要求的示例中,因为有符号字符型被转换为/赋值成长整型,所以 Klocwork 会在第 8、10、12、14 和 16 行报告 CXX.CAST.SIGNED_CHAR_TO_INTEGER 缺陷。

修正代码示例

复制
  void fun()
   {
      char *c_str="Welcome";
      unsigned char u_ch='K';
      int c;
      char ch = 'A';

      c = *c_str++;
 
     c = (unsigned char)*c_str++;

     c = u_ch;
 }

在此修正代码示例中,在将字符型转换为更大的整型大小之前,先将其转换为无符号字符型。