SV.FMT_STR.UNKWN_FORMAT
打印函数调用中存在未知格式说明符
在打印函数调用的格式字符串中,允许在以下格式说明符之前添加 %:d、i、o、u、x、X、f、F、e、E、g、G、a、A、c、s、p、n、C (XCI)、S (XSI) 和 %。如果格式字符串中包含无效的格式说明符,则 SV.FMT_STR.UNKNOWN_FORMAT 检查器会标记此代码。
漏洞与风险
当转换规范的语法不正确时,会产生未定义的行为,从而可能导致非预期的输出。
漏洞代码示例
复制
void foo(FILE* f, char* pc, int i, char c) {
fprintf(f, "%c %s %k", c, pc);
fprintf(f, "%o", i);
}
Klocwork 针对第 2 行报告错误,因为 %k 是无效的格式说明符。
修正代码示例
复制
void foo(FILE* f, char* pc, int i, char c) {
fprintf(f, "%c %s", c, pc);
fprintf(f, "%o", i);
}
在经修正的代码中,已删除无效的格式说明符。
相关检查器
- SV.FMT_STR.PRINT_FORMAT_MISMATCH.BAD
- SV.FMT_STR.PRINT_FORMAT_MISMATCH.UNDESIRED
- SV.FMT_STR.SCAN_FORMAT_MISMATCH.BAD
- SV.FMT_STR.SCAN_FORMAT_MISMATCH.UNDESIRED
- SV.FMT_STR.PRINT_IMPROP_LENGTH
- SV.FMT_STR.PRINT_PARAMS_WRONGNUM.FEW
- SV.FMT_STR.PRINT_PARAMS_WRONGNUM.MANY
- SV.FMT_STR.SCAN_IMPROP_LENGTH
- SV.FMT_STR.SCAN_PARAMS_WRONGNUM.FEW
- SV.FMT_STR.SCAN_PARAMS_WRONGNUM.MANY
- SV.FMT_STR.UNKWN_FORMAT