-fsanitize=undefinedとPicolibcで遊ぶ:組み込みC言語の冒険

2025-04-16

この記事では、GCCとClangの-fsanitize=undefinedフラグをPicolibcライブラリに統合して、未定義または実装定義されたC言語の動作を検出する方法について説明しています。このプロセスにより、setlocale/newlocaleでのNULLチェックの欠落やqsortでの型エラーなど、8つのバグが発見され修正されました。また、ポインタ演算の範囲外や符号付き整数のオーバーフローなど、コード内に隠された未定義の動作も明らかにされました。多くの作業は、未定義の動作を定義済みの動作に置き換えることでしたが、左シフトと算術右シフトを処理するためのlslとasrマクロも作成しました。C言語仕様のシフト演算子に関する欠陥についても不満が述べられています。最後に、コードの品質向上のため、未定義動作サニタイザを試すことを推奨しています。

開発