diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py index e177464c00f7a6..4717b3ff28add2 100755 --- a/Lib/test/test_uuid.py +++ b/Lib/test/test_uuid.py @@ -232,9 +232,17 @@ def test_exceptions(self): # Badly formed hex strings. badvalue(lambda: self.uuid.UUID('')) badvalue(lambda: self.uuid.UUID('abc')) + badvalue(lambda: self.uuid.UUID('123_4567812345678123456781234567')) + badvalue(lambda: self.uuid.UUID('123_4567812345678123456781_23456')) badvalue(lambda: self.uuid.UUID('1234567812345678123456781234567')) badvalue(lambda: self.uuid.UUID('123456781234567812345678123456789')) badvalue(lambda: self.uuid.UUID('123456781234567812345678z2345678')) + badvalue(lambda: self.uuid.UUID('0x123456781234567812345678z23456')) + badvalue(lambda: self.uuid.UUID('0X123456781234567812345678z23456')) + badvalue(lambda: self.uuid.UUID('+123456781234567812345678z234567')) + badvalue(lambda: self.uuid.UUID(' 123456781234567812345678z23456 ')) + badvalue(lambda: self.uuid.UUID(' 123456781234567812345678z2345 ')) + badvalue(lambda: self.uuid.UUID('\uff10123456781234567812345678z234567')) # Badly formed bytes. badvalue(lambda: self.uuid.UUID(bytes='abc')) diff --git a/Lib/uuid.py b/Lib/uuid.py index 4d4f06cfc9ebbe..b6f8f2b215c148 100644 --- a/Lib/uuid.py +++ b/Lib/uuid.py @@ -45,6 +45,7 @@ """ import os +import re import sys from enum import Enum, _simple_enum @@ -177,7 +178,7 @@ def __init__(self, hex=None, bytes=None, bytes_le=None, fields=None, if hex is not None: hex = hex.replace('urn:', '').replace('uuid:', '') hex = hex.strip('{}').replace('-', '') - if len(hex) != 32: + if not re.fullmatch(r'[0-9A-Fa-f]{32}', hex): raise ValueError('badly formed hexadecimal UUID string') int = int_(hex, 16) if bytes_le is not None: diff --git a/Misc/NEWS.d/next/Library/2024-10-18-09-45-34.gh-issue-125651.M0wSAS.rst b/Misc/NEWS.d/next/Library/2024-10-18-09-45-34.gh-issue-125651.M0wSAS.rst new file mode 100644 index 00000000000000..00c79d2dd87366 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2024-10-18-09-45-34.gh-issue-125651.M0wSAS.rst @@ -0,0 +1 @@ +Fix HEX parsing of :class:`uuid.UUID`.