このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
文字の値が EOF に吸収
データ型変換によって、有効な文字値がファイル終端 (EOF) と同じになる
説明
この欠陥は、有効な文字値と EOF (ファイル終端) を区別できなくするデータ型変換が実行された場合に発生します。Bug Finder は、次のいずれかの状態で欠陥にフラグを立てます。
ファイル終端:
intからcharへの変換など、EOF ではない文字値をEOFに変換するデータ型変換を実行します。次に、結果を EOF と比較します。char ch = (char)getchar()
変換は明示的または暗黙的に行われる可能性があります。if((int)ch == EOF)
ワイド文字のファイル終端: WEOF ではないワイド文字値を WEOF に変換するデータ型変換を実行後、結果を WEOF と比較します。
リスク
char データ型は、ファイル終端を示す値 EOF を保持することができません。getchar などの関数には、EOF に対応するために、戻り値の int 型があります。int から char に変換すると、値 UCHAR_MAX (有効な文字値) と EOF はどちらも値 -1 に変換され、相互に区別できなくなります。この変換結果を EOF と比較すると、EOF の誤検知につながる可能性があります。この原理は、ワイド文字の値と WEOF にも当てはまります。
修正方法
EOF または WEOF との比較を変換前に実行します。
例
結果情報
| グループ: プログラミング |
| 言語: C | C++ |
| 既定値: 手書きコードはオン、生成コードはオフ |
コマンド ライン構文: CHAR_EOF_CONFUSED |
| 影響度: High |
バージョン履歴
R2017a で導入
参考
欠陥の検出 (-checkers) | 標準ライブラリ整数ルーチンの無効な使用 | 要注意の関数の戻り値がチェックされていません | errno の未チェック | 符号拡張文字の値の不適切な使用
トピック
- Polyspace Access Web インターフェイスでの Bug Finder の結果の解釈 (Polyspace Access)
- Polyspace Access でのバグ修正または正当化による結果への対処 (Polyspace Access)