メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

size 引数がゼロの memset を使用しています

memset ファミリの関数の size 引数がゼロ

説明

この欠陥は、size 引数をゼロに指定して memset ファミリの関数を呼び出した場合に発生します。関数には memsetwmemsetbzeroSecureZeroMemoryRtlSecureZeroMemory などがあります。

リスク

void *memset (void *ptr, int value, size_t num) は、ptr が指すメモリ ブロックの最初の num バイトを指定の value で埋めます。num の値がゼロだと、memset の呼び出しが冗長なものとなります。ptr が指すメモリは次のようになります。

  • 以前に初期化されていない場合は、初期化されないままとなる。

  • 以前に初期化されている場合は、クリアされず、機密データが含まれている可能性がある。

修正方法

ゼロの size 引数が、コード内で先に現れるエラーにより発生しているかどうかを判定します。エラーを修正します。

すべて展開する

#include <stdio.h>
#include <string.h>

void func (unsigned int size)
{
    char str[] = "Buffer to be filled.";
    memset (str,'-',size);
    puts (str);
}

void calling_func(void) {
    unsigned int buf_size=0;
    func(buf_size);
}

この例では、memset の引数 size がゼロです。

結果情報

グループ: プログラミング
言語: C | C++
既定値: オフ
コマンド ライン構文: MEMSET_INVALID_SIZE
影響度: Medium

バージョン履歴

R2015b で導入