L'idée : une chaîne cache un octet
Une chaîne C de n caractères occupe n + 1 octets. Le dernier est le terminateur '\0'. strlen ne le compte pas, et malloc ne l'ajoute pas à votre place.
Écrire un octet après la fin d'un bloc est un débordement de tas (heap buffer overflow). Ça « marche » souvent : l'octet tombe dans du padding, les tests restent verts et la corruption attend un mauvais jour.
La situation
upper_copy renvoie une copie en majuscules d'une chaîne. Lancez les tests : ils passent. Lancez maintenant le sanitizer : lui, non.
Votre mission
Lisez le rapport du sanitizer : il nomme le bloc débordé, la ligne où il a été alloué et la fonction qui a écrit après sa fin. Comparez le nombre d'octets alloués au nombre d'octets écrits. Donnez ensuite au junior l'arithmétique exacte.
À surveiller
- Des tests verts ne prouvent rien sur la sûreté mémoire. Les deux outils doivent être propres.
- « Alloue plus » est tentant. Est-ce valable pour toutes les longueurs ? Pensez à la chaîne vide.