文字列のメモリ比較
文字列の NULL 終端以降に格納されたデータを memcmp
で比較している
説明
この欠陥は、以下の場合に発生します。
関数
memcmp
を使用して、2 つの文字列をバイト単位で比較する。比較するバイト数が、NULL 終端以降に格納されている無意味なデータまで含んでいる。
次に例を示します。
memcmp(string1, string2, sizeof(string1))
リスク
NULL 終端は文字列の終わりを示します。NULL 終端以降のバイトの比較は無意味です。NULL 終端より前のバイト列に同じ値が格納されていても、2 つの文字列は等しくないという誤った結論になる可能性があります。
修正方法
文字列の比較には strcmp
を使用します。この関数は、NULL 終端までの文字列のみを比較します。
memcmp
を使用して 2 つの文字列をバイト単位で比較する場合は、NULL 終端以降のバイトは比較しないようにします。関数 strlen
を使用して比較するバイト数を決定します。
例
結果情報
グループ: プログラミング |
言語: C | C++ |
既定値: 手書きコードはオン、生成コードはオフ |
コマンド ライン構文: MEMCMP_STRINGS |
影響度: Medium |
バージョン履歴
R2017a で導入