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 行目で違反が報告されます。