Предупреждение C6053

Вызов функции может не завершаться строкой "переменная".

Замечания

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

Большинству стандартных библиотек C и функциям обработки строк Win32 требуются и создаются нулевые строки. Некоторые функции counted string (включая strncpy, wcsncpy, _mbsncpy, _snprintfи snwprintf) не создают нулевые строки, если они точно заполняют буфер. В этом случае последующий вызов строковой функции, ожидающей нулевого завершения строки, выходит за пределы буфера, который ищет ноль. Программа должна убедиться, что строка заканчивается нулем. Как правило, следует передать длину функции "counted string" один меньше размера буфера, а затем явно присвоить нулю последнему символу в буфере.

Имя анализа кода: MISSING_ZERO_TERMINATION1

Примеры

Следующий пример кода создает это предупреждение:

#include <string.h>
#define MAX 15

size_t f( )
{
  char szDest[MAX];
  char *szSource="Hello, World!";

  strncpy(szDest, szSource, MAX);
  return strlen(szDest); // possible crash here
}

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

#include <string.h>
#define MAX 15

size_t f( )
{
  char szDest[MAX];
  char *szSource="Hello, World!";

  strncpy(szDest, szSource, MAX-1);
  szDest[MAX-1]=0;
  return strlen(szDest);
}

Следующий пример кода исправляет это предупреждение с помощью функции безопасной обработки strncpy_s строк.

#include <string.h>
#define MAX 15

size_t f( )
{
  char szDest[MAX];
  char *szSource= "Hello, World!";

  strncpy_s(szDest, sizeof(szDest), szSource, strlen(szSource));
  return strlen(szDest);
}

Эвристика

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

См. также