次の方法で共有


C6202

警告 C6202: <変数> のバッファー オーバーランです。<関数> への呼び出しでスタックが割り当てられた可能性があります: 長さ <サイズ> はバッファー サイズ <max> を超えています。

この警告は、サイズがわかっているスタック バッファーを指すパラメーターが、そのサイズを超えるバイト数をコピーする関数に渡されることを示します。 これにより、バッファー オーバーランが発生する可能性があります。 この問題によって、攻撃に利用される可能性のあるセキュリティ ホールやプログラム クラッシュが発生する場合があります。

使用例

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

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

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

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

#include <memory.h>
void f( )
{
  char charArray[5];
 
  memset ((void *)charArray, 0, sizeof charArray);
}

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

#include <codeanalysis\sourceannotations.h>
using namespace vc_attributes;
void f([Pre(WritableElementsLength="pCLen") ] char *pC, char *pCLen);

void test_f()
{
  char pc[12]; 
  char buff[17];
  f(pc, buff); // warning 6202
  // code...
}

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

参照

参照

C6386

C6203