版本 25.x 新闻公告

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

以下公告特定于 2023 年 11 月 1 日发布的 25.x 版本。有关按时间顺序排列的信息,请参阅新闻

Python 破坏性变更

在 v25 版本中,纯 Python 和 C++ 扩展中的 message.UnknownFields() 将被弃用。它将在 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 攻击。

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