Compania Google a migrat browserul Chrome la biblioteca Skrifa, scrisă în limbajul Rust, care oferă funcționalități pentru procesarea fonturilor în format OpenType. Skrifa implementează un subset al capabilităților motorului de fonturi FreeType, necesare pentru biblioteca 2D Skia, utilizată în Chrome și Chromium. Pentru a elibera biblioteca Skia de dependența de motorul FreeType, a fost creat un nou backend de fonturi, bazat pe Skrifa.
În Chrome 128, backend-ul scris în Rust a fost inclus în mod experimental pentru formate de fonturi folosite rar, precum CFF2 și fonturi colorate. Începând cu lansarea Chrome 133, noul backend este activat pentru toate fonturile web în versiunile pentru platformele Linux, Android și ChromeOS. Pe platformele Windows și macOS, noul motor este utilizat momentan ca rezervă și se activează în cazul în care sistemul nu sprijină formatul fontului pe care încearcă să-l afișeze browserul.
Codul Skrifa a fost dezvoltat de inginerii Google în cadrul instrumentarului Fontations și este deschis sub licențele MIT și Apache 2.0. Pentru a verifica corectitudinea funcționării Skrifa, au fost pregătite aproximativ 700 de teste unitare. Biblioteca suportă decodificarea glyph-urilor în formatele glyf, CFF, CFF2, COLRv0, COLRv1, EBDT, CBDT și sbix, fonturi variative în formatele glyf, CFF2 și COLRv1, și hinting pentru fonturi în formatele glyf, CFF și CFF2.
Pe lângă biblioteca Skrifa, care oferă API pentru accesul la metadatele fonturilor și încărcarea contururilor glyph-urilor, instrumentarul Fontations include biblioteci de nivel scăzut pentru citirea, analiza, modificarea și crearea datelor fonturilor în format OpenType. La rândul său, Fontations face parte din proiectul Oxidize, creat pentru a traduce utilitare și biblioteci pentru lucrul cu textul și fonturile din componente scrise în limbaje precum Python (fonttools, fontmake, nanoemoji) și C++ (HarfBuzz, FreeType) în implementări noi, scrise în Rust.
Dezvoltarea componentelor în Rust a început din cauza eficienței reduse în detectarea erorilor prin testare fuzzing, deoarece formatele de fonturi sunt prea complexe pentru a acoperi toate combinațiile posibile. De exemplu, săptămâna trecută, în FreeType a fost identificată o vulnerabilitate critică care permite executarea de cod la procesarea fonturilor special concepute din cauza unui overflow de buffer. În afară de motorul FreeType, problemele de securitate pot fi cauzate și de dependențele utilizate în acesta, precum bzip2, libpng și zlib.
Utilizarea Rust a permis reducerea semnificativă a riscurilor legate de problemele de gestionare a memoriei, îmbunătățirea calității codului, scăderea timpului necesar pentru remedierea problemelor de securitate și accelerarea implementării îmbunătățirilor la funcțiile Chrome legate de fonturi. Conform statisticilor Google și Microsoft, aproximativ 70% din vulnerabilitățile periculoase sunt cauzate de problemele de gestionare a memoriei, care pot fi evitate prin utilizarea limbajului Rust fără blocuri unsafe.
De exemplu, utilizarea Rust ar fi evitat problemele anterioare identificate în codul FreeType care se referă la accesarea zonelor de memorie eliberate, depășirea limitelor buffer-ului, accesarea array-urilor fără verificarea indicilor, depășirile de tip integer, utilizarea incorectă a zonelor de memorie neinițializate și erorile de conversie între tipuri.
Sursa: opennet.ro
