go x/net/idna: VerifyDNSLength不应拒绝空标签

cidc1ykv  于 9个月前  发布在  Go
关注(0)|答案(4)|浏览(122)

你做了什么?

https://go.dev/play/p/YZC2LJAeSLm

你想看到什么结果?

结果与https://unicode.org/reports/tr46/#ToASCII一致
如果VerifyDnsLength标志为true,则验证DNS长度限制。
每个标签的长度为1到63。

  1. profile.ToASCII(www..com.) = www..com. idna: invalid label "www..com."
  2. profile.ToASCII(www..ćóḿ.) = www..xn--kda3b580m. idna: invalid label "www..ćóḿ."
  3. profile.ToASCII(www.example..) = www.example.. idna: invalid label ""
  4. profile.ToASCII(wwwxamplé..) = www.xn--xampl-9raf.. idna: invalid label ""

你看到了什么?

  1. profile.ToASCII(www..com.) = www..com. idna: invalid label "www..com."
  2. profile.ToASCII(www..ćóḿ.) = www..xn--kda3b580m. idna: invalid label "www..ćóḿ."
  3. profile.ToASCII(wwwxamplé..) = www.xn--xampl-9raf.. idna: invalid label ""
rhfm7lfc

rhfm7lfc1#

CC @neild, @ianlancetaylor。

rwqw0loc

rwqw0loc2#

这可能是重复的#47182

cuxqih21

cuxqih213#

感谢elliotwutingfeng指出问题来源。这解决了#47182中的空TLD与根标签的情况(www.example.com..),但实际上根标签也是不允许的(www.example.com.):
当VerifyDnsLength为true时,不允许空根标签。
所以我在原始帖子中犯了一个错误,输出应该是:

  1. profile.ToASCII(www.example.com.) = www.example.com. idna: invalid label "www.example.com."
  2. profile.ToASCII(wwwxamplé.ćóḿ.) = www.xn--xampl-9raf.xn--kda3b580m. idna: invalid label "www.éxamplé.ćóḿ."
  3. profile.ToASCII(www..com.) = www..com. idna: invalid label "www..com."
  4. profile.ToASCII(www..ćóḿ.) = www..xn--kda3b580m. idna: invalid label "www..ćóḿ."
  5. profile.ToASCII(www.example..) = www.example.. idna: invalid label ""
  6. profile.ToASCII(wwwxamplé..) = www.xn--xampl-9raf.. idna: invalid label ""

因此,这个问题和#47182都应该通过在VerifyDNSLength为true时禁止根标签来解决。这里是修正后的测试场景:https://go.dev/play/p/FvuwfgkvzqP

xdnvmnnf

xdnvmnnf4#

感谢您的更新,我已经在golang/text#43上提交了PR来修复这个问题。

相关问题