C6029

تحذير C6029: يمكن تجاوز احتياطي في يتصل إلى <دالة>: استخدام غير محدد الالقيمة

Th هو التحذير يشير إلى أن دالة التي تأخذ في المخزن مؤقت وحجم هو التي يتم تمريرها بحجم غير محددة. لم تم التحقق من بيانات القراءة الإضافية من أي مصدر خارجي إلى ما إذا كان هو أصغر من الحجم احتياطي. قد عمدا لمهاجم يحدد الكثير بقعة صغيرة من القيمة المتوقعة للحجم، والذي سوف يؤدي إلى تجاوز المخزن مؤقت.

بشكل عام، كلما قمت بقراءة بيانات من مصدر خارجي موثوق به، تأكد من أن إلى التحقق من صحة. هو عادة المناسبة للتحقق من حجم للتأكد من أنها هو في النطاق المتوقع.

مثال

يلي تعليمات برمجية يقوم بإنشاء هذا التحذير بواسطة استدعاء الدالة توضيحي ReadFile مرتين. بعد أول يتصل، خاصية السمة بعد يضع القيمة معلمة ثانية غير الموثوق بها. ولذلك، تمرير القيمة غير موثوق به في المكالمة الثاني إلى ReadFileينشئ هذا التحذير كما هو موضح في التالية تعليمات برمجية:

تضمين # "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;
}

راجع أيضًا:

المبادئ

نظرة عامة حول التعليقات التوضيحية