共用方式為


C6029

更新:2007 年 11 月

警告 C6029: <function> 的呼叫中可能有緩衝區滿溢: 使用了未經確認的值

這項警告表示某一函式會取得緩衝區,而傳遞之緩衝區的大小是未經確認的。從部分外部來源讀入的資料未經確認其大小是否小於緩衝區的大小。攻擊者可能會刻意指定比預期之大小大很多的值,而這將會導致緩衝區滿溢。

一般而言,每當您從未受信任的外部來源讀取資料時,請確認能驗證資料的有效性。這通常適用於驗證大小,以確認資料的大小會在預期的範圍內。

範例

下列程式碼會透過呼叫附註函式 ReadFile 兩次以產生這項警告。在第一次呼叫之後,Post 屬性 (Attribute) Property 會將第二個參數值標示為未受信任。因此,將第二次呼叫中未受信任的值傳遞給 ReadFile 就會產生這項警告,如下列程式碼所示:

#include "windows.h"
void f(char *buff, DWORD cbLen, DWORD cbRead, HANDLE hFile)
{
  if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))  
  {
    // code ...
    if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  // warning 6029
    {
      // code ...
    }
  }
}

若要更正這項警告,請檢查緩衝區大小,如下列程式碼所示:

void f(char *buff, DWORD cbLen, DWORD cbRead, HANDLE hFile)
{
  if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))  
  {
    // code ...
    if (cbLen <= sizeof (buff))  // check length
    {
    // code ...  
      if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  
      {
       // code ...
      }
    }
  }
}

請參閱

概念

附註概觀