SV.FMT_STR.PRINT_PARAMS_WRONGNUM.MANY
表示関数呼び出しの引数が多すぎます
表示関数呼び出しの書式文字列には、書式指定にあるのと同じ数のパラメーターがあるはずです。SV.FMT_STR.PRINT_PARAMS_WRONGNUM.MANY チェッカーは、表示関数にあるパラメーターが書式文字列に指定された数より多い場合、コードにフラグを立てます。
脆弱性とリスク
変換指定の構文が不正確な場合は、動作が未定義となり、予期しない出力を生じる場合があります。
脆弱コード例
コピー
void foo(FILE* f, char* pc, int i, char c) {
fprintf(f, "%o", i, pc);
fprintf(f, "%p", pc);
}
Klocwork は 2 行目でエラーを報告します。書式文字列の指定と対応パラメーターの数は同じでなければならないため、関数は、%o 指定用にパラメーターを 1 つのみ期待し、2 つ受け取ります。3 行目にはフラグがありません。これは、書式文字列指定と対応パラメーターがそれぞれ 1 つあるためです。
修正コード例
コピー
void foo(FILE* f, char* pc, int i, char c) {
fprintf(f, "%o", i);
fprintf(f, "%p", pc);
}
修正例では、2 行目には 1 つの指定と 1 つの対応パラメーターがあります。
関連チェッカー
- 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.SCAN_IMPROP_LENGTH
- SV.FMT_STR.SCAN_PARAMS_WRONGNUM.FEW
- SV.FMT_STR.SCAN_PARAMS_WRONGNUM.MANY
- SV.FMT_STR.UNKWN_FORMAT
- SV.FMT_STR.UNKWN_FORMAT.SCAN