在我的项目中,我目前正在使用fscanf(fp, "%d ",&deviceId))
,其中fp
是文件指针,而deviceId是BOOL
变量。一旦我运行了覆盖率工具(静态分析),我收到一个警告,如下所示:
CID 11375(#1 of 1):调用危险函数(SECURE_CODING) secure_coding:[非常危险]。使用" fscanf"错误地导致缓冲区溢出。 fscanf()假设一个任意大的字符串,因此调用者必须使用正确的精度说明符或从不使用fscanf()。使用正确的精确说明符或进行自己的解析。
无论如何都有解决这个缺陷,因为我无法改变fscanf的使用。任何格式说明符都可以吗?
答案 0 :(得分:2)
静态分析仪总是会发出大量虚假警告。在这种情况下,您的特定静态分析器可能会根据某些给定的代码标准检查代码,该代码标准禁止使用fscanf,无论输入是什么,出于警告中提到的原因。
您必须知道要检查的代码标准以及原因。您显然决定应用禁止fscanf的编码标准,但您坚持使用该功能。
所以没有其他人能为你解决这个问题。如果您的编码标准允许偏差,或者您必须停止使用fscanf,或者您必须选择对您的应用程序有意义的编码标准/工具,则需要创建偏离该规则的偏差。
答案 1 :(得分:1)
正如Lundin所说,使用SECURE_CODING缺陷启用的编码标准非常严格,甚至不允许像你这样的良性情况。
一般来说,盲目地从静态分析工具中启用所有检查器是一个坏主意......有些非常容易受FP影响(比如SECURE_CODING)并且几乎毫无意义。
答案 2 :(得分:0)
您做得对,它不是缺陷 - 覆盖率警告使用fscanf
并且即使您正在使用它也不会例外
如果您使用%s
格式,确实存在潜在风险。