C6204

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

Th هو التحذير يشير إلى استدعاء دالة هو تم إجراؤه التي قد يؤدي يحتمل أن يكون إلى تجاوز سعة مكدس احتياطي "، اعتماداً تشغيل قيم المحتملة من المعلمات للدالة التي يتم تحليلها. قد يتسبب هذا عيب بتجاوز سعة احتياطي exploitable أو التعطل الكلي.

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

مثال

يلي تعليمات برمجية ينشئ هذا التحذير لأن معلمة إدخال ( pCh) قد تحتوي على بيانات غير صحيحة:

#include<string.h>

void f(char *pCh)
{
  char buff[10];
  strcpy(buff, pCh);
}

يمكن تصحيح هذا التحذير بالتحقق من كون الحجم كما هو موضح في التالية تعليمات برمجية:

#include<string.h>

void f(char *pCh)
{ 
  char buff[10];
  if (strlen(pCh) >= sizeof buff)
    return;
  strcpy (buff, pCh);
}

قد يفشل التعليمة البرمجية السابق إذا كان مؤشر غير صالح ( pCh) هو التي تم تمريرها. للتأكد من يسبق تعليمات برمجية أكثر مرونة استخدام التعليقات التوضيحية ومعالجة سلسلة آمن تعمل كما هو موضح فيما يلي تعليمات برمجية:

#include<string.h>
#include <codeanalysis\sourceannotations.h>
void f([Pre(NullTerminated=SA_Yes, Null=SA_No)] char* pCh)
{
  char buff[15];
  if (strlen(pCh) > sizeof buff)
    return;
  strcpy_s(buff,sizeof(buff), pCh);
}

لأن analys هو لا الأداة بمراعاة المجموعة من الجميع المتصلين المحتملة للوظيفة التي يتم تحليلها، هو المحتملة التي التعليمة البرمجية هو آمنة تماما.

راجع أيضًا:

المرجع

strcpy_s wcscpy_s ، _mbscpy_s

المبادئ

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