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 は、スタック バッファーに対して生成されます。