C6029C6029

avertissement C6029 : saturation possible dans l’appel à <fonction > : utiliser de valeur non vérifiéewarning C6029: possible buffer overrun in call to <function>: use of unchecked value

Cet avertissement indique qu'une taille non contrôlée est passée à une fonction qui accepte une mémoire tampon et une taille.This warning indicates that a function that takes a buffer and a size is being passed a unchecked size. Les données lues à partir d'une source externe n'ont pas été vérifiées pour contrôler si elles sont inférieures à la taille de la mémoire tampon.The data read-in from some external source has not been verified to see whether it is smaller than the buffer size. Un agresseur peut spécifier intentionnellement une valeur beaucoup plus grande que la valeur attendue pour la taille, ce qui entraînera un dépassement de mémoire tampon.An attacker might intentionally specify a much larger than expected value for the size, which will lead to a buffer overrun.

En général, chaque fois que vous lisez des données d'une source externe non fiable, pensez à vérifier leur validité.Generally, whenever you read data from an untrusted external source, make sure to verify it for validity. Il convient généralement de vérifier la taille pour s'assurer qu'elle est comprise dans la plage attendue.It is usually appropriate to verify the size to make sure it is in the expected range.

ExempleExample

Le code suivant génère cet avertissement en appelant la fonction annotée ReadFile deux fois.The following code generates this warning by calling the annotated function ReadFile two times. Après le premier appel, la propriété de l'attribut Post marque la deuxième valeur de paramètre comme étant non fiable.After the first call, the Post attribute property marks the second parameter value untrusted. Par conséquent, le passage d'une valeur non fiable dans le deuxième appel à ReadFile génère cet avertissement comme le montre le code suivant : Therefore, passing an untrusted value in the second call to ReadFile generates this warning as shown in the following code:

#inclure « windows.h »#include "windows.h"

bool f(HANDLE hFile)
{
    char buff[MAX_PATH];

    DWORD cbLen;
    DWORD cbRead;

    // Read the number of byte to read (cbLen).
    if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))
    {
        return false;
    }
    // Read the bytes
    if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  // warning 6029
    {
        return false;
    }

    return true;
}

Pour corriger cet avertissement, vérifiez la taille de la mémoire tampon comme le montre le code suivant :To correct this warning, check the buffer size as shown in the following code:

bool f(HANDLE hFile)
{
    char buff[MAX_PATH];

    DWORD cbLen;
    DWORD cbRead;

    // Read the number of byte to read (cbLen).
    if (!ReadFile (hFile, &cbLen, sizeof (cbLen), &cbRead, NULL))
    {
        return false;
    }
    // Ensure that there's enough space in the buffer to read that many bytes.
    if (cbLen > sizeof(buff))
    {
        return false;
    }
    // Read the bytes
    if (!ReadFile (hFile, buff, cbLen, &cbRead, NULL))  // warning 6029
    {
        return false;
    }

    return true;
}

Voir aussiSee Also

Utilisation d’Annotations SAL pour réduire les défauts du codeUsing SAL Annotations to reduce code defects