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
。使用此系统属性可以在您无法立即更新代码时为您争取一些时间,但这应被视为短期权宜之计。