更新 : 2007 年 11 月
警告 C6203: バッファ <変数> のバッファ オーバーランです。<関数> への呼び出しで、長さ <サイズ> はバッファ サイズを超えています。
この警告は、サイズが明確である非スタック バッファを指すパラメータが、そのサイズを超えるバイト数をコピーする関数に渡されることを示します。これにより、バッファ オーバーランが発生する可能性があります。
この問題によって、攻撃に利用される可能性のあるセキュリティ ホールやプログラム クラッシュが発生する場合があります。
使用例
次に示すコードでは、警告 C6203 および C6386 が生成されます。いずれの警告も、不適切なパラメータ (sizeofintArray) が関数に渡されたことによるバッファ オーバーランの問題を示します。
#include <memory.h>
void f( )
{
static char charArray[5];
static int intArray[5];
memset ((void *)charArray, 0, sizeof intArray);
// code ...
}
両方の警告を解決するには、次のコードに示すように、sizeofcharArray を使用して適切なサイズを渡します。
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 は、スタック バッファに対して生成されます。