Společnost Google převedla prohlížeč Chrome na knihovnu Skrifa, napsanou v jazyce Rust, která poskytuje možnosti pro zpracování písem ve formátu OpenType. Skrifa implementuje podmnožinu schopností enginu písem FreeType, potřebnou pro 2D knihovnu Skia, používanou v Chrome a Chromium. Aby se knihovna Skia zbavila závislosti na enginu FreeType, byl vytvořen nový backend pro písma, založený na Skifě.
V Chrome 128 byl napsaný v Rustu backend zahrnut v experimentálním režimu pro málo používané formáty písem, jako jsou CFF2 a barevná písma. Od vydání Chrome 133 je nový backend zapojen pro všechna webová písma ve verzích pro platformy Linux, Android a ChromeOS. Na platformách Windows a macOS se nový engine zatím používá jako záložní a aplikován, pokud systém nepodporuje formát písma, který se prohlížeč snaží zobrazit.
Kód Skrifa vyvinuli inženýři Google v rámci nástroje Fontations a je otevřen pod licencemi MIT a Apache 2.0. Pro ověření funkčnosti Skrifa bylo připraveno přibližně 700 unit testů. Knihovna podporuje dekódování glifů ve formátech glyf, CFF, CFF2, COLRv0, COLRv1, EBDT, CBDT a sbix, variabilní písma ve formátech glyf, CFF2 a COLRv1, a hinting písem ve formátech glyf, CFF a CFF2.
Kromě knihovny Skrifa, která poskytuje API pro přístup k metadatům písem a načítání obrysů glifů, nástroj Fontations zahrnuje nízkoúrovňové knihovny pro čtení, analýzu, změnu a vytváření dat písem ve formátu OpenType. Samotné Fontations je součástí projektu Oxidize, vytvořeného pro převod nástrojů a knihoven pro práci s textem a písmem z komponentů v jazycích Python (fonttools, fontmake, nanoemoji) a C++ (HarfBuzz, FreeType) na nové implementace napsané v Rustu.
Vývoj komponentů v Rustu začal kvůli nedostatečné účinnosti odhalování chyb pomocí fuzzing testování, protože formáty písem jsou příliš složité na pokrytí všech možných kombinací. Například minulý týden byla ve FreeType odhalena kritická zranitelnost, která umožňuje vykonávat kód při zpracování speciálně vytvořených písem z přetečení zásobníku. Kromě enginu FreeType mohou problémy s bezpečností způsobovat i závislosti, které se v něm používají, jako jsou bzip2, libpng a zlib.
Použití Rustu výrazně snížilo pravděpodobnost problémů s pamětí, zlepšilo kvalitu kódu, snížilo čas potřebný k opravě bezpečnostních problémů a urychlilo zavádění vylepšení týkajících se fontů v prohlížeči Chrome. Podle statistik Google a Microsoftu je přibližně 70% nebezpečných zranitelností způsobeno problémy s pamětí, kterým se lze vyhnout použitím jazyka Rust bez unsafe bloků.
Například použití Rustu by zabránilo dříve zjištěným problémům v kódu FreeType, které se týkaly přístupu k uvolněným oblastem paměti, přetečení bufferu, přístupu k poli bez kontroly indexů, celočíselným přetečením, nesprávnému použití nepro čištěných oblastí paměti a chybám při převodu typů.
Zdroj: opennet.ru
