一款名为 wpd 的新型 WebP 解码器正式亮相,旨在提供比主流库 libwebp 更快、更安全的解码体验。该项目特别针对 CVE-2023-4863 等高危漏洞进行了加固,同时在单线程和多线程环境下均展现出优越的性能表现。

直击内存安全痛点

图像解码库广泛应用于操作系统及浏览器沙盒进程中,因需处理复杂的不可信输入,极易成为内存安全漏洞的重灾区。此前影响 Chrome、Firefox 等数十亿设备的 CVE-2023-4863 漏洞,已被美国网络安全和基础设施安全局(CISA)确认在野外被积极利用。Chromium 团队指出,libwebp 高达 70% 的高危安全漏洞源于内存安全问题,且仅靠模糊测试难以根除。

wpd 采用 Rust 语言编写,从底层保障内存安全。为兼顾性能,开发者辅以手写汇编例程优化 SIMD 指令,并严格界定其作用范围。对于对安全性有极高要求的场景,wpd 支持禁用汇编代码,仅使用经审计的非 SIMD 代码运行,从而彻底消除不安全因素。相比之下,完全依赖 C 语言及内在函数的 libwebp 在此方面存在先天劣势。

性能全面超越 libwebp

在确保高安全性的同时,wpd 并未牺牲速度。基于开发者测试数据集的基准测试显示,相较于 libwebp(提交版本 a1d89ff)和 image-webp 0.2.4,wpd 在多项指标上实现显著领先:

  • 单线程有损压缩:速度提升 1.19 倍
  • 单线程无损压缩:速度提升 2.74 倍
  • 多线程有损压缩:速度提升 2.68 倍
  • 多线程无损压缩:速度提升 3.19 倍

测试表明,单线程优势主要源自算法层面的优化,而多线程性能的显著提升则得益于其对并行图像解码的高效支持。

功能兼容与增强

wpd 的目标是成为 libwebp 的完美替代品,因此在功能对等的基础上进行了多项增强。除了支持标准的有损/无损 WebP、Alpha 透明度及动画解码外,wpd 还引入了以下特性:

  • 更丰富的输出格式:支持 BGR/BGRA/ARGB、预乘 Alpha、YUV420P/YUVA420P 以及 RGB565/RGBA4444 等格式,甚至包括 libwebp 不支持的 BGR565/BGRA4444。
  • 高级图像处理:内置裁剪、缩放(含保持长宽比)、垂直翻转及可选的色度上采样。
  • 增量解码能力:支持通过追加字节或累积借用缓冲区进行增量解码,并允许在静态图像解码完成前访问已处理的行。
  • 多线程控制:支持显式设置线程数及并行动画帧预解码,提供更精细的资源管理。

值得注意的是,wpd 同时提供了 C ABI 和原生 Rust API,便于不同技术栈的项目集成。

开源承诺

wpd 采用宽松的 BSD 2-Clause 许可证开源,代码托管于 GitHub。开发团队表示,这是继 fcvvdp 和 fmetrics 之后发布的第三个开源项目,标志着其开源项目数量已超过闭源产品。团队承诺将持续投入资源维护 wpd,并探索与网络安全公司合作,进一步巩固关键软件供应链的安全。