Avertissement C6053

L’appel à 'function' peut ne pas arrêter zéro chaîne 'variable'.

Notes

Cet avertissement indique que la fonction spécifiée a été appelée de telle manière que la chaîne résultante ne soit pas terminée par zéro. Ce défaut peut entraîner un dépassement ou un incident de mémoire tampon exploitable. Cet avertissement est également généré si une fonction annotée attend une chaîne terminée par null, mais que vous transmettez une chaîne non null.

La plupart des fonctions de gestion des chaînes C et win32 nécessitent et produisent des chaînes sans fin. Quelques fonctions « chaîne comptée » (y comprisstrncpy, , wcsncpy, _mbsncpy_snprintfet snwprintf) ne produisent pas de chaînes sans fin s’ils remplissent exactement leur mémoire tampon. Dans ce cas, un appel ultérieur à une fonction de chaîne qui s’attend à ce qu’une chaîne terminée par zéro dépasse la fin de la mémoire tampon à la recherche de zéro. Le programme doit s’assurer que la chaîne se termine par un zéro. En général, vous devez passer une longueur à la fonction « chaîne comptée » une plus petite que la taille de la mémoire tampon, puis affecter explicitement zéro au dernier caractère de la mémoire tampon.

Nom de l’analyse du code : MISSING_ZERO_TERMINATION1

Exemples

L’exemple de code suivant génère cet avertissement :

#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
}

Pour corriger cet avertissement, arrêtez la chaîne sans fin, comme indiqué dans l’exemple de code suivant :

#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);
}

L’exemple de code suivant corrige cet avertissement à l’aide de la fonction de manipulation strncpy_s de chaîne sécurisée :

#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);
}

Heuristique

Cet avertissement est parfois signalé sur certains idiomes garantis pour être sûrs dans la pratique. En raison de la fréquence et des conséquences potentielles de ce défaut, l’outil d’analyse est biaisé en faveur de la recherche de problèmes potentiels au lieu de son biais typique de réduction du bruit.

Voir aussi