Version 25.x 新闻公告

Protocol Buffers 25.x 版本的更改公告。

以下公告特定于 25.x 版本。要按时间顺序查看信息,请参阅 新闻

Python 破坏性更改

在 v25 版本中,message.UnknownFields() 将在纯 Python 和 C++ 扩展中被弃用。它将在 v26 版本中移除。请使用 unknown_fields.py 中的新 UnknownFieldSet(message) 支持作为替代。

μpb 迁移到 Protobuf Git 仓库

从 v25 版本开始,μpb 现在位于 protobuf 仓库 中,而不是位于其在单独仓库中的 原位置。未来所有 μpb 开发都将仅在新位置进行。

两个仓库的合并将简化和加速我们的开发流程,因为它消除了更新 protobuf 和 μpb 之间固定版本依赖项的需要。现在对 μpb 的更改会在 protobuf 代码中立即生效,反之亦然,无需手动升级步骤。

我们预计大多数用户无需采取太多(如果有的话)操作来适应此更改。μpb 是 Ruby、PHP 和 Python 实现背后的引擎,但除非您的代码直接引用 μpb,否则您很可能不会注意到此更改。

如果您从 Bazel 项目中引用 μpb,则需要更新 μpb 引用以指向 protobuf (例如,将 @upb 替换为 @com_google_protobuf)。我们保持 μpb 文件路径和 Bazel 目标不变,以最大限度地减少额外更改的需要,但有两个例外

  • upbc 目录已重命名为 upb_generator
  • μpb 的顶层 BUILD 文件已移动到 upb 目录中。因此,例如,对 @upb//:reflection 的引用现在应写为 @com_google_protobuf//upb:reflection

Poison Java 代码生成

我们正在将一个更改补丁到 25.x 分支中,该更改将 poison 在 3.21.7 版本 之前创建的 Java 代码生成。然后,我们将把从 3.21.7 到 3.25.5 的所有 Java protobuf 版本标记为易受 footmitten CVE 攻击。

在此更改补丁应用后,除非您设置系统属性“-Dcom.google.protobuf.use_unsafe_pre22_gencode”,否则 protobuf 将从 makeExtensionsImmutable 方法抛出 UnsupportedOperationException 异常。如果您无法立即更新代码,使用此系统属性可以为您争取一些时间,但应将其视为短期解决方法。