次の方法で共有


C6203

警告 C6203: バッファー <変数> のバッファー オーバーランです。<関数> への呼び出しで、長さ <サイズ> はバッファー サイズを超えています。

この警告は、サイズが明確である非スタック バッファーを指すパラメーターが、そのサイズを超えるバイト数をコピーする関数に渡されることを示します。 これにより、バッファー オーバーランが発生する可能性があります。

この問題によって、攻撃に利用される可能性のあるセキュリティ ホールやプログラム クラッシュが発生する場合があります。

使用例

次に示すコードでは、警告 C6203 および C6386 が生成されます。 いずれの警告も、不適切なパラメーター (sizeof intArray) が関数に渡されたことによるバッファー オーバーランの問題を示します。

#include <memory.h>
void f( )
{
  static char charArray[5];
  static int intArray[5];

  memset ((void *)charArray, 0, sizeof intArray);
  // code ...
}

両方の警告を解決するには、次のコードに示すように、sizeof charArray を使用して適切なサイズを渡します。

void f( )
{
  static char charArray[5];
   
  memset ((void *)charArray, 0, sizeof charArray);
  // code ...
}

次のコードでは、WritableElementsLength プロパティによって関数パラメーター char *pC に注釈が付けられています。 pC の書き込み可能な要素の実際の数は、バッファー char *pCLen の要素の数です。 この場合、pCLen の要素が書き込み可能なパラメーター pC よりも多いので、呼び出しサイトで警告 C6203 が生成されます。

#include <malloc.h>
#include <codeanalysis\sourceannotations.h>
using namespace vc_attributes;

void f([Pre(WritableElementsLength="pCLen")] char *pC, char *pCLen);

void test_f( )
{
  char *pChar = ( char * ) malloc ( 10 );
  char buff[15];
  test_f ( pChar, buff ); // warning 6203
  // code ...
}

警告 C6202 は、スタック バッファーに対して生成されます。

参照

参照

C6202

C6386