Warnung C26832
Die Zuordnungsgröße ist das Ergebnis einer schmalen Konvertierung, die zu einem Überlauf führen kann.
Hinweise
Diese Warnung meldet, dass die für eine Zuordnung angegebene Größe das Ergebnis einer schmalen Konvertierung sein kann, die zu einem numerischen Überlauf führt. Beispiel:
void* SmallAlloc(int);
void foo(unsigned short i, unsigned short j)
{
unsigned short size = i + j;
int* p = (int*)SmallAlloc(size); // Warning: C26832
p[i] = 5;
}
Im Ausdruck i + j
werden sowohl als auch j
i
ganze Zahlen höhergestuft, und das Ergebnis der Addition wird in einer temporären ganzzahligen Zahl gespeichert. Anschließend wird die temporäre ganze Zahl implizit in einen unsigned short
Wert umgewandelt, bevor der Wert gespeichert size
wird. Die Umwandlung unsigned short
kann überlaufen, in diesem Fall SmallAlloc
kann ein kleinerer Puffer als erwartet zurückgegeben werden. Dies führt wahrscheinlich zu begrenzungsgebundenen Versuchen, später auf den Puffer zuzugreifen. Dieses Codemuster kann zu Sicherheitsrisiken bei Remotecodeausführung führen
Diese Überprü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(unsigned short i, unsigned short j)
{
if (i > 100 || j > 100)
return;
unsigned short size = i + j;
int* p = (int*)SmallAlloc(size);
p[i] = 5;
}
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für