PRECISION.LOSS.INIT
初始化期间出现精度丢失
当在初始化期间对较小数据类型进行隐式转换可能导致精度(数据)丢失时,会报告 PRECISION.LOSS.INIT 缺陷。
漏洞与风险
根据具体环境,这种情况可能被利用,例如在导致缓冲区溢出时。
漏洞代码示例
复制
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 缺陷,因为已使用适当的位掩码对转换源进行掩码处理。