C6202
تحذير C6202: تجاوز <متغير> احتياطي الذي هو مكدس من الممكن تخصيصه، في استدعاء <دالة>: يتجاوز الطول <الحجم> الحجم احتياطي <أقصى>
Th هو يشير التحذير إلى أن معلمة تشير إلى مكدس مخزن مؤقت بحجم المعروفة هو الذي يتم تمريره إلى دالة تقوم بنسخ المزيد وحدات البايت من هذا الحجم. سوف يؤدي هذا الموقف احتياطي تجاوز. Th هو defect هو المحتمل أن تتسبب فجوة الأمان exploitable أو عطل في برنامج.
مثال
يلي تعليمات برمجية يقوم بإنشاء تحذيرات C6202 و C6386. Both warnings indicate buffer overrun problems because an incorrect parameter (sizeof intArray) is passed to the function:
#include <memory.h>
void f( )
{
int intArray[5];
char charArray[5];
memset ((void *)charArray, 0, sizeof intArray);
// code ...
}
To correct both warnings, pass correct size using sizeof charArray as shown in the following code:
#include <memory.h>
void f( )
{
char charArray[5];
memset ((void *)charArray, 0, sizeof charArray);
}
في التعليمة البرمجية التالية، ومعلمات دالة char *pCهو annotated باستخدام WritableElementsLengthخاصية. العدد الفعلي لعنصر قابل للكتابة في pCهو عدد العناصر للمخزن المؤقت char *pCLen. في ترتيب هو هذه الحالة، تحذير C6202 هو التي تم إنشاؤها في موقع المكالمة لأنه pCLenيحتوي على عناصر المزيد معلمة قابلة للكتابة عليها pC.
#include <codeanalysis\sourceannotations.h>
using namespace vc_attributes;
void f([Pre(WritableElementsLength="pCLen") ] char *pC, char *pCLen);
void test_f()
{
char pc[12];
char buff[17];
f(pc, buff); // warning 6202
// code...
}
تحذير C6203 هو هو sued للمخازن المؤقتة غير المكدس.