使用文件中的fscanf来bool变量和覆盖率运行

时间:2014-09-24 12:11:13

标签: c scanf

在我的项目中,我目前正在使用fscanf(fp, "%d ",&deviceId)),其中fp是文件指针,而deviceId是BOOL变量。一旦我运行了覆盖率工具(静态分析),我收到一个警告,如下所示:

  

CID 11375(#1 of 1):调用危险函数(SECURE_CODING)   secure_coding:[非常危险]。使用" fscanf"错误地导致缓冲区溢出。 fscanf()假设一个任意大的字符串,因此调用者必须使用正确的精度说明符或从不使用fscanf()。使用正确的精确说明符或进行自己的解析。

无论如何都有解决这个缺陷,因为我无法改变fscanf的使用。任何格式说明符都可以吗?

3 个答案:

答案 0 :(得分:2)

静态分析仪总是会发出大量虚假警告。在这种情况下,您的特定静态分析器可能会根据某些给定的代码标准检查代码,该代码标准禁止使用fscanf,无论输入是什么,出于警告中提到的原因。

您必须知道要检查的代码标准以及原因。您显然决定应用禁止fscanf的编码标准,但您坚持使用该功能。

所以没有其他人能为你解决这个问题。如果您的编码标准允许偏差,或者您必须停止使用fscanf,或者您必须选择对您的应用程序有意义的编码标准/工具,则需要创建偏离该规则的偏差。

答案 1 :(得分:1)

正如Lundin所说,使用SECURE_CODING缺陷启用的编码标准非常严格,甚至不允许像你这样的良性情况。

一般来说,盲目地从静态分析工具中启用所有检查器是一个坏主意......有些非常容易受FP影响(比如SECURE_CODING)并且几乎毫无意义。

答案 2 :(得分:0)

您做得对,它不是缺陷 - 覆盖率警告使用fscanf并且即使您正在使用它也不会例外

如果您使用%s格式,确实存在潜在风险。