D’aucuns penseraient que le langage C est un langage simple. Après tout le fameux Kernighan & Ritchie de 1978 (a.k.a. White Book) ne fait que 200 pages, bien peu pour un langage qui a servi de base au noyau Linux, au compilateur GCC et à l’interpréteur de référence de Python, CPython. Et pourtant s’il y a bien une notion parmi toutes celles introduites dans the White Book qui met au défi ingénieurs en sécurité, chercheurs en compilation et développeurs en tout genre, c’est la notion de pointeur, et cette terrible question : le déréférencement de mon pointeur donne-t-il lieu à un comportement indéfini ?Des ingénieurs de chez Apple ont trouvé un chemin pragmatique et intéressant à cette question, et ils l’ont mis à disposition dans un fork de clang à travers une option, -fbounds-safety, et un fichier d’en-tête, <ptrcheck.h>. Examinons leur approche.
Imaginons que vous êtes un développeur C, et que je vous présente cette fonction :
Que pouvez-vous faire avec le pointeur renvoyé ? Quelle est la durée de vie de ce pointeur ? Vous n’en savez rien, il faudra lire la documentation, mais ce n’est pas le propos de cet article. La question qui nous intéresse est plutôt : quelle zone mémoire puis-je accéder depuis ce pointeur ? Là encore vous n’en savez rien. Et le langage n’a pas de moyen standard pour vous aider.
Par contre, on pourrait changer la signature de cette fonction de cette façon :
- 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