Skrifa против FreeType: новая эра обработки шрифтов в Chrome

leer en español

Skrifa против FreeType: новая эра обработки шрифтов в Chrome

Старые подходы к управлению памятью уступают место инновациям.

image

Компания Google официально начала использовать собственную разработку Skrifa вместо библиотеки FreeType в браузере Chrome для обработки веб-шрифтов. Новый механизм построен на языке программирования Rust и служит более безопасной альтернативой прежнему решению, устраняя уязвимости, которые ранее удавалось выявлять даже после выпуска обновлений.

Изначально Chrome использовал FreeType для загрузки и интерпретации шрифтов на Android, ChromeOS и Linux. Однако архитектура FreeType основана на языке C, что делает библиотеку уязвимой к ошибкам управления памятью.

Несмотря на многолетнюю оптимизацию и вклад разработчиков Google, повторяющиеся баги, связанные с переполнением буфера, неверными типами данных и неправильной работой с памятью, продолжали проникать в релизы. Один только процесс устранения таких уязвимостей требует примерно четверти рабочего времени одного разработчика.

Большую часть проблем исследователи связывают с особенностями языка C: ручным управлением памятью, неявными макросами, устаревшими практиками типизации и сложностью тестирования новых функций. Шрифты как формат файлов представляют собой контейнер с множеством взаимозависимых таблиц: от визуального описания глифов до мини-программ на собственном байт-коде, управляющем отображением. Простое случайное изменение байтов, которое используется в обычных инструментах фуззинга, почти не помогает — большинство тестов отбраковывается в начале обработки.

Skrifa как часть библиотеки Fontations построена с учётом всех этих проблем. Благодаря Rust, библиотека изначально защищена от выходов за границы памяти и других типичных ошибок. Для повышения производительности используется строго типизированное чтение данных из файлов без копирования, реализованное через стороннюю библиотеку bytemuck, прошедшую масштабную верификацию.

Кроме надёжности, команда уделила внимание качеству отображения. Переход с FreeType не должен влиять на внешний вид текста — для этого созданы инструменты вроде fauntlet, сравнивающие вывод обеих библиотек на десятках тысяч шрифтов. Все изменения также проходят сравнение отрисовки в движке Skia на уровне отдельных пикселей, включая разные режимы сглаживания и хинтинга.

Фуззинг Skrifa запущен с июня 2024 года и уже нашёл 39 багов, но ни один из них не был критическим с точки зрения безопасности. Все они либо приводили к визуальным артефактам, либо к контролируемым сбоям, не угрожающим пользователю.

Переход к Skrifa начался с Chrome 128, где библиотека применялась к малоиспользуемым форматам шрифтов. С версии Chrome 133, вышедшей в феврале 2025 года, Skrifa начала обрабатывать все веб-шрифты на Linux, Android и ChromeOS, а также выступать как резервный механизм на Windows и macOS в случае, если системные шрифты не поддерживаются.

В будущем Google планирует полностью перейти на использование Skrifa и для системных шрифтов, начав с Linux и ChromeOS, а затем на Android. Компания подчёркивает, что безопасность остаётся ключевым приоритетом, а внедрение Rust позволило сократить число уязвимостей и ускорить выпуск обновлений без потерь качества и производительности.

Революция в песочнице: Превращаем PT Sandbox в идеальный инструмент безопасности

25 марта в 11:00 — эксклюзивный мастер-класс по созданию идеальных правил фильтрации в PT Sandbox. Готовые решения для максимальной производительности.

Реклама. АО «Позитив Текнолоджиз», ИНН 7718668887