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

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

你做了什么?

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

你想看到什么结果?

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

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

你看到了什么?

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

rhfm7lfc1#

CC @neild, @ianlancetaylor。

cuxqih21

cuxqih213#

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

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

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

xdnvmnnf

xdnvmnnf4#

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

相关问题