Amusez-vous avec -fsanitize=undefined et Picolibc : une aventure en C embarqué

2025-04-16

Cet article de blog détaille l’intégration de l’indicateur -fsanitize=undefined de GCC et Clang dans la bibliothèque Picolibc pour détecter les comportements de langage C indéfinis ou définis par l’implémentation. Ce processus a permis de découvrir et de corriger huit bogues réels, notamment des vérifications NULL manquantes dans setlocale/newlocale et des erreurs de type dans qsort. Il a également révélé des comportements indéfinis cachés dans le code, tels que des calculs de pointeurs hors limites et des dépassements de capacité d’entiers signés. Une grande partie du travail a consisté à remplacer les comportements indéfinis par des comportements définis, mais l’auteur a également écrit des macros lsl et asr pour gérer les décalages à gauche et les décalages à droite arithmétiques, exprimant son insatisfaction face aux lacunes de la spécification du langage C concernant les opérateurs de décalage. L’auteur conclut en encourageant les développeurs à essayer le sanitizateur de comportement indéfini pour améliorer la qualité du code.

Développement Sécurité du code