EN JP CN

SV.FMT_STR.UNKWN_FORMAT

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 チェッカーは、書式文字列に無効な書式指定子がある場合、コードにフラグを立てます。

脆弱性とリスク

変換指定の構文が不正確な場合は、動作が未定義となり、予期しない出力を生じる場合があります。

脆弱コード例

1  void foo(FILE* f, char* pc, int i, char c) {
2      fprintf(f, "%c %s %k", c, pc);
3      fprintf(f, "%o", i);
4  }

Klocwork は、%k が無効な書式指定子のため、2 行目でエラーを報告します。

修正コード例

1  void foo(FILE* f, char* pc, int i, char c) {
2      fprintf(f, "%c %s", c, pc);
3      fprintf(f, "%o", i);
4  }

修正されたコードでは、無効な書式指定子は削除されました。