警告 C26831
配置大小可能是數值溢位的結果
備註
此警告會報告為配置指定的大小可能是數值溢位的結果。 例如:
void *SmallAlloc(int);
void foo(int i, int j)
{
int* p = (int*)SmallAlloc(i + j); // Warning: C26831
p[i] = 5;
}
如果 i+j
溢位, SmallAlloc
則傳回小於預期的緩衝區。 這可能會導致界限外嘗試稍後存取緩衝區。 此程式碼模式可能會導致遠端程式碼執行弱點。
此檢查適用于常見的配置函式,例如 new
、 malloc
和 VirtualAlloc
。 檢查也適用于函式名稱中不 alloc
區分大小寫的自訂配置器函式。
這項檢查有時無法辨識某些檢查可能會防止溢位,因為檢查是保守的。
此警告適用于 Visual Studio 2022 17.7 版和更新版本。
範例
若要修正先前可能溢位的程式 i+j
代碼範例,請引入檢查以確定它不會。 例如:
void *SmallAlloc(int);
void foo(int i, int j)
{
if (i < 0 || j < 0 )
{
return;
}
if (i > 100 || j > 100)
{
return;
}
int* p = (int*)SmallAlloc(i + j);
p[i] = 5;
}