共用方式為


C6204

警告 C6204: 對 <function> 的呼叫中可能有緩衝區滿溢: 使用了未經確認的參數 <variable>

這則警告指出進行的函式呼叫可能會導致堆疊緩衝區滿溢,而這會根據要分析之函式的可能參數值來決定。 這項缺失可能會造成可利用的緩衝區滿溢或損毀。

檢視程式碼及此函式的呼叫端,以查看是否曾以未預期的資料呼叫函式,是很好的作法。 如果不確定所有的呼叫是否安全,可檢查所有輸入字串的長度,或是使用適當屬性加註函式參數來驗證函式的輸入,都是適當的作法。

範例

下列程式碼會因為輸入參數 (pCh) 可能包含無效的資料,而產生這則警告:

#include<string.h>

void f(char *pCh)
{
  char buff[10];
  strcpy(buff, pCh);
}

利用驗證緩衝區的大小來更正這則警告,如下列程式碼所示:

#include<string.h>

void f(char *pCh)
{ 
  char buff[10];
  if (strlen(pCh) >= sizeof buff)
    return;
  strcpy (buff, pCh);
}

如果傳遞了錯誤的指標 (pCh),則上述的程式碼可能會失敗。 若要讓上述程式碼更具彈性,請使用附註和安全字串管理函式,如下列程式碼所示:

#include<string.h>
#include <codeanalysis\sourceannotations.h>
void f([Pre(NullTerminated=SA_Yes, Null=SA_No)] char* pCh)
{
  char buff[15];
  if (strlen(pCh) > sizeof buff)
    return;
  strcpy_s(buff,sizeof(buff), pCh);
}

因為分析工具未考慮要分析之函式的所有可能呼叫端集合,所以整個程式碼有可能是安全的。

請參閱

參考

strcpy_s, wcscpy_s, _mbscpy_s

概念

附註概觀