Upozornění C26831
Velikost přidělení může být výsledkem číselného přetečení.
Poznámky
Toto upozornění hlásí, že velikost zadaná pro přidělení může být výsledkem číselného přetečení. Příklad:
void *SmallAlloc(int);
void foo(int i, int j)
{
int* p = (int*)SmallAlloc(i + j); // Warning: C26831
p[i] = 5;
}
Pokud i+j
přetečení, vrátí vyrovnávací paměť, SmallAlloc
která je menší, než se čekalo. To pravděpodobně povede k tomu, že se později pokusí o přístup k vyrovnávací paměti mimo hranice. Tento vzor kódu může vést k ohrožením zabezpečení vzdáleného spuštění kódu.
Kontrola platí pro běžné funkce přidělování, jako je new
, malloc
a VirtualAlloc
. Kontrola platí také pro vlastní funkce alokátoru, které mají alloc
v názvu funkce (nerozlišují malá a velká písmena).
Tato kontrola někdy nedokáže rozpoznat, že určité kontroly můžou zabránit přetečení, protože kontrola je konzervativní.
Toto upozornění je k dispozici v sadě Visual Studio 2022 verze 17.7 a novějších verzích.
Příklad
Pokud chcete opravit předchozí příklad kódu, ve kterém i+j
by mohlo přetékat, zaveďte kontrolu, abyste se ujistili, že to nebude. Příklad:
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;
}
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro