[protocolbuffers/protobuf][Ruby] Message.decode/encode:添加 max_recursion_depth 选项

2024-05-11 950 views
8

这允许通过将“max_recursion_depth”设置为所需的整数值来增加默认值 64 的递归深度。这对于编码或解码复杂的嵌套 protobuf 消息非常有用,否则这些消息会因 RuntimeError 或“解析期间发生错误”而出错。

修复#1493

回答

1

看来我们也需要在 JRuby 端实现这一点。

5

@haberman 感谢您的评论 - 在最新的提交中得到解决。

4

@haberman我想检查您是否可以重新触发测试构建,以便我们可以确认问题现已解决?谢谢!

3

@acozzette 感谢您的重新运行 - 我无法真正解释测试失败,它似乎与实际的代码更改无关。我刚刚重新基于最新的main,以防修复错误。

可以再跑一次吗?谢谢你!

2

@lfittl 我注意到我们的一些 Ruby 测试几天前开始失败,尽管我还没有机会进行调查。测试失败很可能是无关的。

4

@lfittl 我注意到我们的一些 Ruby 测试几天前开始失败,尽管我还没有机会进行调查。测试失败很可能是无关的。

是的,看起来发布测试仍然失败(因为它们位于https://github.com/protocolbuffers/protobuf/pull/9291上),但除此之外,现在是绿色的(看起来 rebase 修复了其他测试)。

@haberman 如果您想看到任何其他调整,请告诉我。感谢您的审阅!

8

@哈伯曼新年快乐! - 如果您希望看到此 PR 的其他调整内容,请告诉我:)

2

我刚才尝试解决 GitHub UI 中的合并冲突。希望这会起作用,然后我将合并它,除非 @haberman 有其他评论。

6

我认为唯一剩下的问题是确保我们与其他语言尽可能保持一致:

我刚刚检查了 Java、C++,似乎将此称为“递归限制”而不是“最大递归深度:

https://github.com/protocolbuffers/protobuf/blob/3f5fc4df1de8e12b2235c3006593e22d6993c3f5/csharp/src/Google.Protobuf/CodedInputStream.cs#L231-L241

https://github.com/protocolbuffers/protobuf/blob/3e1967e10be786062ccd026275866c3aef487eba/src/google/protobuf/io/coded_stream.h#L418-L419

https://github.com/protocolbuffers/protobuf/blob/d8ccfbf00541eb0705bbba640d65e3df814b3d2a/java/core/src/main/java/com/google/protobuf/CodedInputStream.java#L386-L400

在这种情况下,我们可以调用参数recursion_limit来代替 吗max_recursion_depth

抱歉耽搁了!

6

让我继续合并它,我将发出后续拉取请求以将参数重命名为recursion_limit.谢谢,@lfittl!

5

@acozzette @haberman 非常好,感谢您的帮助和合并:)