CERT.STR.ARG.CONST_TO_NONCONST

const char ポインターを非 const char ポインター引数に渡さないでください。

脆弱性とリスク

文字列リテラルは、コンパイル時に、十分な長さを持ち、かつ null で終了するように作成されます。文字列リテラルのどの部分であっても、プログラムによって変更が試みられると、動作は不定になります。 理想的には、それらを const char または const whar_t のポインター (または配列) にのみ代入することが望まれます。

このチェッカーは文字列リテラル、または非 const 関数引数ポインターへの const 文字列ポインターの代入を探します。

軽減と防止

ポインターによって文字列を変更してはならない場合、引数宣言で "const" を使用してください。

コピー
  void func_v1(void) {
    const char *aLiteral = "/tmp/abXXXXXX";
    mkstemp("/tmp/edXXXXXX");
    mkstemp(aLiteral);
  }

3 行目と 4 行目で違反が報告されます。