C6204
更新 : 2007 年 11 月
警告 C6204: <関数> への呼び出しでバッファ オーバーランが発生した可能性があります: 確認されていないパラメータ <変数> が使用されています。
この警告は、実行中の関数呼び出しによって、分析する関数に渡されるパラメータの値によってはスタック バッファのオーバーランが発生する可能性があることを示します。この問題によって、攻撃に利用される可能性のあるバッファ オーバーランまたはクラッシュが発生する場合があります。
コードだけでなくこの関数の呼び出し元も確認することで、この関数が予期しないデータを使って呼び出されるかどうかを確認することをお勧めします。すべての呼び出しが安全かどうかはっきりしない場合は、入力文字列の長さをチェックするか、適切なプロパティを使用して関数パラメータに注釈を付けることによって、関数に対する入力を検証してください。
使用例
次のコードを実行すると、入力パラメータ (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);
}
分析ツールでは関数に対するすべての呼び出し元を分析することは想定されていないため、コードが完全に安全である可能性があります。