C6204
Предупреждение C6204: возможно переполнение буфера в вызове <функции>: используется непроверенный параметр <переменная>.
Это предупреждение указывает, что осуществляется вызов функции, который может привести к переполнению буфера стека в зависимости от возможных значений параметров функции. Эта неполадка может привести к переполнению буфера и сбою.
Рекомендуется проверить код и объекты, вызывающие функцию, чтобы узнать, можно ли вызвать функцию с непредвиденными данными. Если нет уверенности в том, что все вызовы безопасны, имеет смысл проверять входные данные функции путем проверки длины всех входных строк или путем аннотации параметра функции с помощью соответствующих свойств.
Пример
Это предупреждение возникает в следующем коде, поскольку входной параметр (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);
}
Программа анализа не рассматривает набор всех возможных вызовов функции, поэтому код может считаться вполне безопасным.