【发布时间】:2014-12-22 15:21:59
【问题描述】:
Cppcheck 1.67 在此行的源代码中提出了可移植性问题:
sscanf(s, "%d%*[,;.]%d", &f, &a);
这是我从中得到的信息:
在某些版本的 libc 上,没有字段宽度限制的 scanf 可能会因大量输入数据而崩溃。
格式字符串的初衷是接受两个整数之间的三个可能的限制字符之一,而今天 - 感谢 Cppcheck[1] - 我看到 %*[,;.] 接受偶数字符串限制字符。但是我怀疑我的格式字符串可能会导致崩溃,因为无限制的部分被忽略了。
是否存在缓冲区溢出问题? ...可能在幕后?
[1] 如何在远视和失明之间迷失:
我尝试通过%1*[,;.](在some API doc之后)修复它,但Cppcheck坚持这个问题,所以我也尝试%*1[,;.]以同样的“成功”。看来我必须暂时压制它了……
【问题讨论】:
-
所以,你有一个正确的格式,你把它改成别的东西(可能不正确?)来抑制误报,但没有成功?看起来更像是“内联抑制”的工作:在此处搜索 cppcheck.sourceforge.net/manual.pdf
-
指出的消息没有意义,因为
%*[,;.]不使用缓冲区。 -
@Deduplicator 不,我尝试改进模式以满足 Cppcheck 帮助检测的实际需求。
-
@BLUEPIXY 是的,但就我而言,有一个小问题......
-
@Wolf:是的,这是一种解决方法。我建议在上面提交错误报告,对吧?
标签: c++ c portability scanf cppcheck