Ruby IPAddr 类接受错误的 IPv6 地址字符串

Ruby IPAddr class accepting wrong IPv6 address string

提问人:Md. Farhan Memon 提问时间:6/1/2023 更新时间:6/1/2023 访问量:90

问:

我们正在升级 ruby 版本 v2.7.3 -> v3.1.3

我们的一个测试用例失败,与有效的 ipv6 地址字符串相关,请检查以下内容

# ruby 2.7.3
IPAddr.new('fe80::85e:7530:69ec:9074%en0').ipv6?
=> IPAddr::InvalidAddressError (invalid address: fe80::85e:7530:69ec:9074%en0)

# ruby 3.1.3

IPAddr.new('fe80::85e:7530:69ec:9074%en0').ipv6?
=> true

这真的是一个错误还是我遗漏了什么?请帮忙。.

Ruby-on-Rails 红宝石 Ruby-2.7 Ruby-3.1

评论


答:

1赞 Jörg W Mittag 6/1/2023 #1

这真的是一个错误还是我遗漏了什么?

这曾经是 ipaddr 默认 gem的问题,最高版本 1.2.2 已版本 1.2.3 中修复,以便完全符合 RFC 4007RFC 6874。默认 gem 的 1.2.3 版本是作为 Ruby 3.1.0 的一部分发布的。ipaddr

所以,你是对的。这是一个错误(尽管对此意见不一),已在 1.2.3 / Ruby 3.1.0 中修复。ipaddr

评论

0赞 Md. Farhan Memon 6/1/2023
哪个版本有问题? 或1.2.21.2.3
0赞 Md. Farhan Memon 6/2/2023
我也在 ruby-lang 错误跟踪器上提出了它,同样的事情。感谢您的澄清。bugs.ruby-lang.org/issues/19705
0赞 Jörg W Mittag 6/2/2023
“哪个版本有问题?1.2.2 或 1.2.3“ – ipaddr 1.2.2 和之前的所有版本都有问题(这意味着 Ruby 3.0.6 和之前的所有版本都有错误),ipaddr 1.2.3 和之后的所有版本都已修复(这意味着 Ruby 3.1.0 和之后的所有版本都已修复)。在代码示例中,你可以很容易地看到这一点,其中 Ruby 2.7.3 引发了异常(这显然是错误的),而 Ruby 3.1.3 正确地接受了地址。我虽然最后一句话很清楚(“在 ipaddr 1.2.3 / Ruby 3.1.0 中修复”),但我不是以英语为母语的人,所以如果您认为有什么可以改进的地方,请继续。