Android System Font Iterator Bug Jagd: Eine Geschichte versteckter Symbole

2025-06-02

Dieser Blogbeitrag beschreibt die Behebung eines überraschend langwierigen Bugs. Android definiert verschiedene API-Level, wobei einige Symbole erst ab einer bestimmten Version verfügbar sind. Firefox für Android (Fenix) verwendet `ASystemFontIterator_open`, das erst ab API 29 verfügbar ist. Für Abwärtskompatibilität verwendet Fenix `__ANDROID_UNAVAILABLE_SYMBOLS_ARE_WEAK__` und `__builtin_available` für Kompilierzeit- und Laufzeitprüfungen. Das Firefox-Buildsystem verwendet jedoch standardmäßig die ausgeblendete Sichtbarkeit (`-fvisibility=hidden`), wodurch das schwache Symbol `ASystemFontIterator_open` in der gemeinsam genutzten Bibliothek undefiniert wird und zu Abstürzen führt. Die Lösung bestand in einer einfachen Änderung, um die Standard-Sichtbarkeit beim Einbinden von Android-System-Headern vorübergehend zu ändern.

Entwicklung