Avertissement C26831
La taille d’allocation peut être le résultat d’un dépassement de capacité numérique
Notes
Cet avertissement signale que la taille spécifiée pour une allocation peut être le résultat d’un dépassement de capacité numérique. Par exemple :
void *SmallAlloc(int);
void foo(int i, int j)
{
int* p = (int*)SmallAlloc(i + j); // Warning: C26831
p[i] = 5;
}
En cas i+j
de dépassement de capacité, SmallAlloc
retourne une mémoire tampon inférieure à ce qui est prévu. Cela entraînera probablement des tentatives hors limites d’accès à la mémoire tampon ultérieurement. Ce modèle de code peut entraîner des vulnérabilités d’exécution de code à distance.
Le case activée s’applique aux fonctions d’allocation courantes telles que new
, malloc
et VirtualAlloc
. La case activée s’applique également aux fonctions d’allocateur personnalisées qui ont (qui ne respectent alloc
pas la casse) dans le nom de la fonction.
Cette case activée ne reconnaît pas parfois que certaines case activée peuvent empêcher les dépassements de capacité, car le case activée est conservateur.
Cet avertissement est disponible dans Visual Studio 2022 version 17.7 et versions ultérieures.
Exemple
Pour corriger l’exemple de code précédent dans lequel i+j
il peut dépasser, introduisez un case activée pour vous assurer qu’il ne le fera pas. Par exemple :
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;
}
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour