Поделиться через


C6029

warning C6029: possible buffer overrun in call to <function>: use of unchecked value

Это предупреждение означает, что в функцию, которая принимает буфер и размер, передается непроверенный размер.Данные, считываемые из внешнего источника, не были проверены, чтобы установить, является ли их размер меньше размера буфера.Злоумышленник может намеренно указать размер значительно больше ожидаемого, что приведет к переполнению буфера.

В общем случае, при чтении данных из ненадежного внешнего источника необходимо убедиться в их допустимости.Обычно целесообразно проверить размер, чтобы убедиться в том, что он находится в ожидаемом диапазоне.

Пример

Данное предупреждение создается в следующем коде путем двукратного вызова функции аннотирования ReadFile.После первого вызова свойство атрибута Post помечает значение второго параметра функции как ненадежное.Поэтому при передаче ненадежного значения во втором вызове ReadFile создается это предупреждение, как показано в следующем коде:

#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;
}

Чтобы устранить это предупреждение, проверьте размер буфера, как показано в следующем коде:

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;
}

См. также

Другие ресурсы

Общие сведения о заметках