CodeProver不检测和无符号变量溢出/下溢

8视图(30天)
你好,
我已经注意到代码验证不提高警告2无符号变量之间的减法。它提高2签署的,但不是与两个无符号。
例子
无效测试(空白){
uint8_t一个,b, c;
b = foo ();
c = bar ();
一个= c;
}
这个操作 c 不被视为一个潜在的发生溢出/下溢。
问题
这是CodeProver或缺少配置中的一个问题,好吗?
谢谢你的回答,
致以最亲切的问候

接受的答案

Alexandre De Barros
Alexandre De Barros 2017年12月26日
你好,
在标准C,没有溢出的无符号类型。C99标准(§6.2.5/9):
“涉及无符号的计算操作数不能溢出,因为结果不能代表产生的无符号整数类型模数量减少是一个大于最大的值可以由生成的类型。”
因此,默认情况下,代码验证不会报告这种溢出。
现在,如果你有兴趣通过检测它们,您可以更改默认行为由于选择“检测溢出”。
在配置面板中,选择“代码验证验证”然后“检查行为”,右边的页面,选择“检测溢出”,选择“签名和无符号”。
请注意,在你的例子中,溢出会出现在赋值的变量,因为执行减法int类型(积分促销)。
亚历克斯
2的评论
本杰明贴画
本杰明贴画 2018年1月8日
通过添加参数-scalar-overflows-checks签名抑或没有命令polyspace-code-prover-nodesktop,可能现在检测无符号“溢出”。
谢谢!

登录置评。

更多的答案(0)