PRECISION.LOSS.INIT

初始化期间出现精度丢失

当在初始化期间对较小数据类型进行隐式转换可能导致精度(数据)丢失时,会报告 PRECISION.LOSS.INIT 缺陷。

漏洞与风险

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

缓解与预防

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

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

漏洞代码示例

复制
void foo(int i) {
    char c = i; // PRECISION.LOSS.INIT
}

Klocwork 在第 2 行标记了 PRECISION.LOSS.INIT 缺陷,该行中的 int 类型转换为 char 类型。

修正代码示例

复制
void foo(int i) {
    char c = (i & 0xFF);
}

Klocwork 在第 2 行不再标记 PRECISION.LOSS.INIT 缺陷,因为已使用适当的位掩码对转换源进行掩码处理。

安全培训

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