El navegador Chrome se ha trasladado al motor de fuentes Skrifa, escrito en Rust

La empresa Google ha trasladado el navegador Chrome a la biblioteca Skrifa, escrita en Rust y que ofrece capacidades para el procesamiento de fuentes en formato OpenType. Skrifa implementa un subconjunto de las funcionalidades del motor de fuentes FreeType, necesario para la biblioteca 2D Skia, utilizada en Chrome y Chromium. Para liberar a la biblioteca Skia de la dependencia del motor FreeType, se creó un nuevo backend de fuentes basado en Skrifa.

En Chrome 128, el backend escrito en Rust se incluyó en modo experimental para formatos de fuentes poco utilizados, como CFF2 y fuentes a color. A partir de la versión 133 de Chrome, el nuevo backend se ha activado para todas las fuentes web en compilaciones para las plataformas Linux, Android y ChromeOS. En las plataformas Windows y macOS, el nuevo motor se utiliza por el momento como respaldo, aplicándose cuando el sistema no soporta el formato de fuente que intenta mostrar el navegador.

El código de Skrifa ha sido desarrollado por ingenieros de Google como parte del toolkit Fontations y se ha publicado bajo las licencias MIT y Apache 2.0. Para verificar el correcto funcionamiento de Skrifa, se han preparado alrededor de 700 pruebas unitarias. La biblioteca soporta la decodificación de glifos en formatos glyf, CFF, CFF2, COLRv0, COLRv1, EBDT, CBDT y sbix, así como fuentes variables en formatos glyf, CFF2 y COLRv1, y hinting de fuentes en formatos glyf, CFF y CFF2.

Además de la biblioteca Skrifa, que proporciona una API para acceder a los metadatos de fuentes y cargar contornos de glifos, el toolkit Fontations incluye bibliotecas de bajo nivel para leer, analizar, modificar y crear datos de fuentes en formato OpenType. A su vez, Fontations es parte del proyecto Oxidize, creado para trasladar utilidades y bibliotecas para trabajar con texto y fuentes de componentes en lenguajes Python (fonttools, fontmake, nanoemoji) y C++ (HarfBuzz, FreeType) a nuevas implementaciones escritas en Rust.

El desarrollo de componentes en Rust comenzó debido a la ineficacia en la detección de errores mediante pruebas de fuzzing, ya que los formatos de fuentes son demasiado complejos para abarcar todas las posibles combinaciones. Por ejemplo, la semana pasada se encontró una vulnerabilidad crítica en FreeType que permitía ejecutar código al procesar fuentes diseñadas de manera específica debido a un desbordamiento de búfer. Además del motor FreeType, los problemas de seguridad también pueden ser causados por sus dependencias, como bzip2, libpng y zlib.

El uso de Rust ha permitido reducir significativamente la probabilidad de problemas relacionados con la memoria, mejorar la calidad del código, disminuir el tiempo dedicado a corregir problemas de seguridad y acelerar la implementación de mejoras en las capacidades de Chrome relacionadas con las fuentes. Según estadísticas de Google y Microsoft, alrededor del 70% de las vulnerabilidades peligrosas se deben a problemas de manejo de memoria que se pueden evitar utilizando Rust sin bloques unsafe.

Por ejemplo, el uso de Rust habría evitado problemas previamente detectados en el código de FreeType relacionados con el acceso a áreas de memoria liberadas, desbordamientos de búfer, acceso a arreglos sin verificación de índices, desbordamientos enteros, uso incorrecto de áreas de memoria no inicializadas y errores de conversión de tipos.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster