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.SCAN チェッカーは、書式文字列に無効な書式指定子がある場合、コードにフラグを立てます。
脆弱性とリスク
変換指定の構文が不正確な場合は、動作が未定義となり、予期しない出力を生じる場合があります。
脆弱コード例
コピー
void foo(FILE* f, char* pc, int i, char c) {
fprintf(f, "%c %s %k", c, pc);
fprintf(f, "%o", i);
}
Klocwork は、%k が無効な書式指定子のため、2 行目でエラーを報告します。
修正コード例
コピー
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