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 targets 不变,以尽量减少额外更改的需求,但有两个例外

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

Poison Java gencode

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

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