Браузърът Chrome е преведен на шрифтова платформа Skrifa, написана на Rust

Компанията Google е прехвърлила браузъра Chrome на библиотеката Skrifa, написана на Rust, която предоставя възможности за обработка на шрифтове в OpenType формат. Skrifa реализира подмножество на възможностите на шрифтовия двигател FreeType, необходимо за 2D библиотеката Skia, използвана в Chrome и Chromium. За да освободят библиотеката Skia от зависимостта от FreeType, е създаден нов шрифтов бекенд, базиран на Skrifa.

В Chrome 128, написаният на Rust бекенд е включен в експериментален режим за рядко използвани формати на шрифтове, като CFF2 и цветни шрифтове. Започвайки от изданието Chrome 133, новият бекенд е активен за всички уеб шрифтове в версиите за платформи Linux, Android и ChromeOS. На платформите Windows и macOS новият двигател в момента се използва като резервен и се прилага в случай, че системата не поддържа шрифта, който браузърът се опитва да изобрази.

Кодът на Skrifa е разработен от инженери на Google в рамките на инструмента Fontations и е отворен с лицензиите MIT и Apache 2.0. За проверка на коректността на работата на Skrifa са подготвени около 700 unit теста. Библиотеката поддържа декодиране на глифи в форматите glyf, CFF, CFF2, COLRv0, COLRv1, EBDT, CBDT и sbix, вариативни шрифтове в форматите glyf, CFF2 и COLRv1, хинтиг на шрифтове в форматите glyf, CFF и CFF2.

Освен библиотеката Skrifa, която предоставя API за достъп до метаданни на шрифтове и зареждане на контурите на глифовете, инструментарият Fontations включва нискоуровневи библиотеки за четene, парсинг, промяна и създаване на шрифтови данни в OpenType формат. От своя страна Fontations е част от проекта Oxidize, създаден за прехвърляне на утилити и библиотеки за работа с текст и шрифтове от компоненти на Python (fonttools, fontmake, nanoemoji) и C++ (HarfBuzz, FreeType) към нови реализации, написани на Rust.

Разработката на компоненти на Rust започна заради недостатъчната ефективност на откритията на грешки чрез fuzzing тестове, тъй като форматите на шрифтове са твърде сложни, за да обхванат всички възможни комбинации. Например, миналата седмица във FreeType беше открита критична уязвимост, позволяваща изпълнението на код при обработка на специално конфигурирани шрифтове от препълване на буфера. Освен двигателя FreeType, проблеми с безопасността могат да създават и зависимостите, използвани в него, като bzip2, libpng и zlib.

Използването на Rust значително намали вероятността от проблеми при работа с паметта, повиши качеството на кода, намали времето за отстраняване на проблеми със сигурността и ускори внедряването на подобрения в възможностите на Chrome, свързани с шрифтовете. Според статистиката на Google и Microsoft около 70% от опасните уязвимости произхождат от проблеми с паметта, които могат да бъдат избегнати при използването на Rust без unsafe блокове.

Например, използването на Rust би позволило да се избегнат предишни проблеми в кода на FreeType, свързани с достъпа до освободени области на паметта, излизането извън границите на буфера, достъпа до масиви без проверка на индексите, целочислените преливания, неправилната употреба на неинициализирани области на паметта и грешките при преобразуване на типове.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster