共用方式為


C6203

警告 C6203: 緩衝區 <variable> 發生緩衝區滿溢 (於 <function> 呼叫中): 長度 <size> 超過緩衝區大小

這項警告表示將指向已知大小之非堆疊緩衝區的參數,傳遞至會複製比該大小更多位元組到緩衝區的函式。 這個情況會造成緩衝區滿溢。

這項缺失會造成有可能遭利用的安全性弱點或程式毀損。

範例

下列程式碼會產生警告 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 的項目數。 在此情況下,會在呼叫位置產生警告 C6203,因為 pCLen 具有比可寫入參數 pC 更多的項目。

#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