Share via


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, mallocet 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

C26832
C26833