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);
}
因為分析工具未考慮要分析之函式的所有可能呼叫端集合,所以整個程式碼有可能是安全的。