説明
固定長のスタックバッファーに容量を超えるバイト数をコピーしたり読み込んだりすると、隣接するスタックメモリを上書きするおそれがあります。
想定される影響
- クラッシュ、データ破損、制御フローの乗っ取りにつながる可能性があります。
対処方法
書き込み先バッファーの容量以内の長さを指定し、サイズを自動的に取得するラッパーを使用してください。
例
変更前
c
char buf[8];
memcpy(buf, src, 32);
変更後
c
char buf[8];
memcpy(buf, src, sizeof(buf));
解説:
- 変更前: 8バイトのバッファーに32バイトをコピーしています。
- 変更後: 書き込み先の配列サイズでコピー長を制限します。この例は
srcから8バイト以上を読み取れることを前提とするバイトコピーであり、文字列の終端文字は追加しません。