PRECISION.LOSS.CALL

在函数调用期间出现精度损失

PRECISION.LOSS 检查器查找在函数调用期间中那些指向较小的数据类型进行的、可能导致数据精度损失的隐式转换的实例。

漏洞与风险

根据具体环境,这种情况可能被利用,例如在导致缓冲区溢出时。

缓解与预防

如果精度损失转换是刻意为之,则应使用相应的位掩码来对转换源进行掩码处理。例如:

复制
char c = (i & 0xFF);

漏洞代码示例

复制
  void foo(unsigned char v);
  void test(unsigned long data){
    foo(data);   
  }

Klocwork 标记了第 3 行,其中无符号长整型被转换为无符号字符型。

相关检查器

安全培训

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