Le navigateur Chrome est passé au moteur de polices Skrifa, écrit en Rust.

La société Google a transféré le navigateur Chrome vers la bibliothèque Skrifa, écrite en langage Rust et offrant des capacités de traitement des polices au format OpenType. Skrifa implémente un sous-ensemble des fonctionnalités du moteur de polices FreeType, nécessaire à la bibliothèque 2D Skia, utilisée dans Chrome et Chromium. Pour libérer la bibliothèque Skia de la dépendance au moteur FreeType, un nouveau backend de polices a été créé, basé sur Skrifa.

Dans Chrome 128, le backend écrit en Rust a été intégré en mode expérimental pour des formats de polices rarement utilisés, tels que CFF2 et les polices couleur. À partir de la version Chrome 133, le nouveau backend est utilisé pour toutes les polices web dans les versions pour les plateformes Linux, Android et ChromeOS. Sur les plateformes Windows et macOS, le nouveau moteur est encore utilisé en tant que secours et n'est appliqué que si le système ne prend pas en charge le format de police que le navigateur tente d'afficher.

Le code Skrifa a été développé par des ingénieurs de Google dans le cadre de l'outil Fontations et est ouvert sous les licences MIT et Apache 2.0. Pour vérifier le bon fonctionnement de Skrifa, environ 700 tests unitaires ont été préparés. La bibliothèque prend en charge le décodage des glyphes dans les formats glyf, CFF, CFF2, COLRv0, COLRv1, EBDT, CBDT et sbix, ainsi que des polices variables dans les formats glyf, CFF2 et COLRv1, et le hinting des polices dans les formats glyf, CFF et CFF2.

En plus de la bibliothèque Skrifa, qui fournit une API pour accéder aux métadonnées des polices et charger les contours des glyphes, l'outil Fontations comprend des bibliothèques de bas niveau pour lire, analyser, modifier et créer des données de polices au format OpenType. Fontations fait partie du projet Oxidize, qui a été créé pour transférer les utilitaires et bibliothèques utilisés pour travailler avec du texte et des polices des composants écrits en Python (fonttools, fontmake, nanoemoji) et C++ (HarfBuzz, FreeType) vers de nouvelles implémentations écrites en Rust.

Le développement de composants en Rust a commencé en raison de l'inefficacité insuffisante dans la détection des erreurs par le biais de tests de fuzzing, les formats de polices étant trop complexes pour couvrir toutes les combinaisons possibles. Par exemple, la semaine dernière, une vulnérabilité critique a été identifiée dans FreeType, permettant l'exécution de code lors du traitement de polices spécialement conçues à partir d'un dépassement de tampon. En plus du moteur FreeType, les dépendances utilisées, telles que bzip2, libpng et zlib, peuvent également poser des problèmes de sécurité.

L'utilisation de Rust a permis de réduire considérablement la probabilité de problèmes liés à la mémoire, d'améliorer la qualité du code, de diminuer le temps consacré à corriger les problèmes de sécurité et d'accélérer les améliorations des fonctionnalités de Chrome liées aux polices. Selon les statistiques de Google et Microsoft, environ 70 % des vulnérabilités dangereuses sont causées par des problèmes de gestion de la mémoire, qui peuvent être évités en utilisant le langage Rust sans blocs unsafe.

Par exemple, l'utilisation de Rust aurait permis d'éviter les problèmes antérieurement détectés dans le code de FreeType, liés à l'accès à des zones de mémoire libérées, aux dépassements de tampon, à l'accès aux tableaux sans vérification des index, aux débordements d'entiers, à une mauvaise utilisation de zones de mémoire non initialisées et aux erreurs de conversion de types.

Source : opennet.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster