SV.FMT_STR.PRINT_IMPROP_LENGTH

不兼容的长度修饰符

在特定类型的格式规范中,可以在格式字符串中使用参数的长度修饰符(例如 h、l 或 L)。如果不能将长度修饰符与给定的格式说明符一起使用,则 SV.FMT_STR.PRINT_IMPROP_LENGTH 检查器会发出警告。例如,在规范 %hf 中,长度修饰符 h 与格式说明符 %f 一起使用时没有任何意义。

漏洞与风险

编译器通常会忽略不兼容的长度修饰符用法。但是,此类使用案例可能表示开发者打算使用不同的格式规范,并且在使用过程中出错,因此 Klocwork 警告允许设计者考虑改用正确的规范。

缓解与预防

参数和长度修饰符的兼容性取决于正在使用的特定编译器,因此最好是查看特定于编译器的帮助或文档,例如 MSDN 网站或适当的 fprintf Linux 手册页。常用的资源文档是 CERT 网站的文章 FIO00-C:小心创建格式字符串