gpt4 book ai didi

java.util.UUID.fromString 不检查长度

转载 作者:太空狗 更新时间:2023-10-29 22:51:49 27 4
gpt4 key购买 nike

当我查看 java.util.UUID.fromString 的实现时,我发现它不检查 UUID 长度。这有什么特别的原因吗?它只检查以“-”分隔的组件。

String[] components = name.split("-");
if (components.length != 5)
throw new IllegalArgumentException("Invalid UUID string: "+name);

当长度不是 36 时,它是否也应该抛出 IllegalArgumentException?

目前,在没有长度检查的情况下,如果数字小于组件长度,数字会自动添加 0,如果超过,则会移位。缺点是,如果输入一个缺少数字的 UUID 字符串,它会被视为有效并在前面加上 0。这很难调试。

例如,这个“12345678-1234-1234-1234-123456789ab”变成了“12345678-1234-1234-1234-0123456789ab”。注意到添加的“0”了吗?这个“12345678-1234-1234-1234-123456789abcd”变成“12345678-1234-1234-1234-23456789abcd”,去掉了“1”。

为了更进一步,字符串“1-2-3-4-5”也将被视为有效并变为“00000001-0002-0003-0004-000000000005”。

编辑:为了澄清我的问题,这是一个错误还是为了遵循某些标准或原则而故意完成的?

最佳答案

只有 UUID 类的原始作者可以告诉您为什么他们选择不检查 fromString 方法中的组件长度,但我怀疑他们试图注意 Postel's law :

Be liberal in what you accept, and conservative in what you send.

您始终可以根据这样的正则表达式检查输入:

[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}

关于java.util.UUID.fromString 不检查长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9768510/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com