
Google逐步將Chrome字型處理函式庫從FreeType搬遷至Skrifa。Skrifa是一款以Rust開發的新函式庫,目的是提升字型處理的記憶體安全性,減少安全漏洞,並提升開發效率。這項變更已在Chrome 133上實行,首先應用於Linux、Android和ChromeOS的網頁字型處理,計畫之後擴展至作業系統字型處理上。
Rust語言的記憶體安全特性,被認為能有效解決由C語言開發的FreeType,長期存在的記憶體管理問題,如陣列越界存取、使用後釋放(Use-After-Free)及整數溢位等安全漏洞。
FreeType字型處理函式庫長期以來廣受使用,負責解析、轉換和渲染字型,使其適用於各種螢幕與解析度。Chrome過去在Android、ChromeOS及Linux平臺上都依賴FreeType進行字型運算,如字距調整、輪廓載入,與字型顯示最佳化處理TrueType字型微調(Hinting)等。
隨著網路應用的蓬勃發展,瀏覽器需要能更安全地處理來自未知來源的網頁字型,而以C語言開發的FreeType函式庫,其低層記憶體管理機制使得安全性維護成本不斷攀升。Google在內部安全評估中發現,僅是透過模糊測試(Fuzzing)發現與修復FreeType漏洞,每年至少需要0.25位全職工程師的資源投入,即使如此,仍有部分漏洞無法及時攔截,甚至在漏洞已進入用戶端後才被發現。
這些問題促使Google尋找新的解決方案,而Rust內建的記憶體安全機制成為理想選擇,以Rust開發的Skrifa屬於Fontations函式庫家族的一部分,並與Chrome的圖形函式庫Skia整合。Skrifa的開發以幾個核心原則為基礎,其資料結構設計為不可變,提升程式的可讀性與可維護性,同時提高多執行緒運算的效率。
Google由於要確保Skrifa與FreeType的字型品質相符,還開發了一款名為fauntlet的工具,以大亮字型測試比對Skrifa與FreeType的輸出,確保新系統能夠維持既有的字型顯示品質。此外,Google在Skia內部進行了廣泛的像素對比測試,以驗證不同字型渲染模式,如反鋸齒與字型微調模式下,Skrifa的表現仍與FreeType一致。
Skrifa自2024年6月開始持續進行模糊測試,至今已發現39個錯誤,不過這些錯誤皆非安全性漏洞,僅影響視覺呈現或導致受控的崩潰,不會造成可利用的安全風險。Google在開發中選擇使用Rust bytemuck函式庫,執行安全的型別轉換,避免Rust內部不允許的直接位元轉換操作,進一步保證記憶體存取的安全性。
目前,Skrifa已全面取代Chrome 133上的網頁字型處理功能,並計畫在未來進一步擴展至作業系統字型的解析工作,首先從Linux與ChromeOS開始,接著擴展至Android。
熱門新聞
2025-03-17
2025-03-17
2025-03-18
2025-03-18
2025-03-19
2025-03-17