Warnung C26831
Die Zuordnungsgröße kann das Ergebnis eines numerischen Überlaufs sein.
Hinweise
Diese Warnung meldet, dass die für eine Zuordnung angegebene Größe das Ergebnis eines numerischen Überlaufs sein kann. Beispiel:
void *SmallAlloc(int);
void foo(int i, int j)
{
int* p = (int*)SmallAlloc(i + j); // Warning: C26831
p[i] = 5;
}
Wenn i+j
Überlauf erfolgt, wird ein Puffer zurückgegeben, SmallAlloc
der kleiner als erwartet ist. Dies führt wahrscheinlich zu begrenzungsgebundenen Versuchen, später auf den Puffer zuzugreifen. Dieses Codemuster kann zu Remotecodeausführungsrisiken führen.
Die Prüfung gilt für allgemeine Zuordnungsfunktionen wie new
, malloc
und VirtualAlloc
. Die Überprüfung gilt auch für benutzerdefinierte Allokatorfunktionen, die (Groß-/Kleinschreibung) im Funktionsnamen aufweisen alloc
.
Diese Überprüfung erkennt manchmal nicht, dass bestimmte Prüfungen Überläufe verhindern können, da die Prüfung konservativer ist.
Diese Warnung ist in Visual Studio 2022, Version 17.7 und höher, verfügbar.
Beispiel
Um das vorherige Codebeispiel zu beheben, in dem i+j
ein Überlauf ausgeführt werden kann, führen Sie eine Überprüfung ein, um sicherzustellen, dass dies nicht der Fall ist. Beispiel:
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;
}
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für