Androidシステムフォントイテレータのバグハント:隠れたシンボルの物語
2025-06-02
このブログ投稿では、驚くほど長引いたバグ修正について説明します。Androidは異なるAPIレベルを定義しており、一部のシンボルは特定のバージョンからしか利用できません。Android版Firefox(Fenix)は、API 29以降でしか利用できない`ASystemFontIterator_open`を使用しています。下位互換性のために、Fenixはコンパイル時と実行時のチェックに`__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__`と`__builtin_available`を使用しています。しかし、Firefoxのビルドシステムはデフォルトで非表示の可視性(`-fvisibility=hidden`)を使用しているため、弱いシンボル`ASystemFontIterator_open`が共有ライブラリで未定義となり、クラッシュが発生します。修正は、Androidシステムヘッダーを含める際のデフォルトの可視性を一時的に変更するという簡単なものでした。
開発