不確定文字列の使用
fgets ファミリ関数の未検証バッファーの使用
説明
この欠陥が発生するのは、下記に示すような fgets
ファミリ関数を使用した書き込み操作が成功したかどうかをチェックせず、
char * fgets(char* buf, int n, FILE *stream)
buf
である場合、チェッカーは以下の場合に欠陥を報告します。
文字列やワイド文字列を表示または操作する標準関数の引数として
buf
を渡す。関数から
buf
を返す。パラメーターの型として
const char *
またはconst wchar_t *
を使用する外部関数の引数としてbuf
を渡す。buf
をbuf[index]
または*(buf + offset)
として読み取る (ここでindex
またはoffset
は、バッファーの先頭からの距離を表す数値です)。
リスク
fgets
ファミリ関数が失敗した場合、出力バッファーの内容は不確定になります。このようなバッファーの使用には未定義の動作があり、プログラムによる処理の停止、他のセキュリティの脆弱性発生の原因になる可能性があります。
修正方法
fgets
ファミリ関数が失敗した場合、関数の出力バッファーを既知の文字列値にリセットします。
例
結果情報
グループ: プログラミング |
言語: C | C++ |
既定値: オフ |
コマンド ライン構文: INDETERMINATE_STRING
|
影響度: Medium |
バージョン履歴
R2017b で導入