L’histoire, ou plutôt l’Histoire, est une coquine. Et quand Dennis Ritchie et Ken Thompson inventent le langage C en 1972, ils prennent une décision anodine, une micro-optimisation qui fait gagner quelques octets, mais qui aura un impact important sur la sécurité de nombreux systèmes : en C, les chaînes de caractères sont terminées par un octet positionné à zéro.
À la différence de memcpy qui prend en paramètre la quantité de mémoire à copier (dans l’hypothèse que le buffer de sortie soit assez grand), la fonction strcpy copiera successivement les octets du buffer d’entrée vers le buffer de sortie jusqu’à trouver une valeur sentinelle, le fameux ‘\0’. La porte ouverte à de nombreuses exploitations et à une API qui a bien évolué au fil du temps.
1. strcpy
La page de manuel de strcpy(3) insiste lourdement sur ce sujet : c’est à la charge du développeur d’allouer un buffer assez grand pour contenir la chaîne copiée. Si ce n’est pas le cas, l’écriture a lieu sur les octets qui suivent, typiquement si le buffer de destination a...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première