このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
文字列操作で格納先バッファーがアンダーフローしています
関数がバッファーの先頭から負のオフセットでバッファーに書き込む
説明
この欠陥は、特定の文字列操作関数によって、その格納先バッファー引数にバッファーの先頭から負のオフセットで書き込まれた場合に発生します。
たとえば、関数 sprintf(char* buffer, const char* format)
では buffer
を演算 buffer = (char*)arr; ... buffer += offset;
から取得します。arr
は配列で、offset
は負の値です。
リスク
バッファー アンダーフローにより、メモリ破損やシステム停止のような予期しない動作を引き起こす可能性があります。また、バッファー アンダーフローは、コード インジェクションのリスクにもつながります。
修正方法
格納先バッファーの引数がポインター演算の結果得られたものである場合は、ポインターをデクリメントしているかどうかを確認します。デクリメント前の元の値かデクリメント値を変更することで、ポインターのデクリメントを修正します。
例
結果情報
グループ: 静的メモリ |
言語: C | C++ |
既定値: 手書きコードはオン、生成コードはオフ |
コマンド ライン構文: STRLIB_BUFFER_UNDERFLOW |
影響度: High |
バージョン履歴
R2015b で導入