Przeglądarka Chrome została przetłumaczona na silnik czcionek Skrifa, napisany w Rust.

Firma Google przeszła na bibliotekę Skrifa w przeglądarce Chrome, napisaną w języku Rust i oferującą możliwości przetwarzania czcionek w formacie OpenType. Skrifa implementuje podzbiór funkcji silnika czcionek FreeType, niezbędny dla 2D-biblioteki Skia, stosowanej w Chrome i Chromium. Aby odciążyć bibliotekę Skia od zależności do silnika FreeType, stworzono nowy backend czcionek oparty na Skrifa.

W Chrome 128 backend napisany w Rust został włączony w trybie eksperymentalnym dla rzadko używanych formatów czcionek, takich jak CFF2 i czcionki kolorowe. Począwszy od wydania Chrome 133, nowy backend jest używany dla wszystkich czcionek internetowych w wersjach dla platform Linux, Android i ChromeOS. Na platformach Windows i macOS nowy silnik jest na razie używany jako zapasowy i ma zastosowanie, gdy system nie obsługuje formatu czcionki, który próbuje wyświetlić przeglądarka.

Kod Skrifa został opracowany przez inżynierów Google w ramach narzędzi Fontations i jest otwarty na licencjach MIT i Apache 2.0. Do sprawdzenia poprawności działania Skrifa przygotowano około 700 testów jednostkowych. Biblioteka wspiera dekodowanie glifów w formatach glyf, CFF, CFF2, COLRv0, COLRv1, EBDT, CBDT i sbix, czcionki wariacyjne w formatach glyf, CFF2 i COLRv1 oraz hinting czcionek w formatach glyf, CFF i CFF2.

Oprócz biblioteki Skrifa, która dostarcza API do uzyskiwania dostępu do metadanych czcionek i ładowania konturów glifów, narzędzia Fontations obejmują niskopoziomowe biblioteki do odczytu, analizy, modyfikacji i tworzenia danych czcionek w formacie OpenType. Fontations jest częścią projektu Oxidize, stworzonego w celu przetłumaczenia narzędzi i bibliotek do pracy z tekstem i czcionkami z komponentów napisanych w językach Python (fonttools, fontmake, nanoemoji) i C++ (HarfBuzz, FreeType) na nowe implementacje napisane w języku Rust.

Rozwój komponentów w Rust rozpoczął się z powodu niewystarczającej skuteczności wykrywania błędów za pomocą testów fuzzingowych, ponieważ formaty czcionek są zbyt złożone, aby objąć wszystkie możliwe kombinacje. Na przykład w zeszłym tygodniu we FreeType zidentyfikowano krytyczne zagrożenie, które pozwala na wykonanie kodu podczas przetwarzania specjalnie skonstruowanych czcionek z powodu przepełnienia bufora. Oprócz silnika FreeType problemy z zapewnieniem bezpieczeństwa mogą stwarzać również używane w nim zależności, takie jak bzip2, libpng i zlib.

Zastosowanie języka Rust znacznie zmniejszyło ryzyko wystąpienia problemów z pamięcią, poprawiło jakość kodu, skróciło czas potrzebny na naprawę problemów z bezpieczeństwem oraz przyspieszyło wprowadzanie ulepszeń do funkcji Chromu związanych z czcionkami. Według danych Google i Microsoftu, około 70% niebezpiecznych luk w zabezpieczeniach wynika z problemów związanych z pamięcią, którym można zapobiec, korzystając z języka Rust bez bloków unsafe.

Na przykład, zastosowanie Rust pozwoliłoby uniknąć problemów wcześniej wykrywanych w kodzie FreeType, związanych z dostępem do zwolnionych obszarów pamięci, przekraczaniem granic bufora, dostępem do tablic bez sprawdzenia indeksów, przepełnieniami liczb całkowitych, niewłaściwym używaniem niezerowanych obszarów pamięci oraz błędami w rzutowaniu typów.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster