Skip to content

Commit 2f59b40

Browse files
committed
gh-125651: Use regex to avoid any unallowed character to passed to int
1 parent bcac51f commit 2f59b40

2 files changed

Lines changed: 11 additions & 4 deletions

File tree

Lib/test/test_uuid.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,11 +277,17 @@ def test_exceptions(self):
277277
# Badly formed hex strings.
278278
badvalue(lambda: self.uuid.UUID(''))
279279
badvalue(lambda: self.uuid.UUID('abc'))
280-
badvalue(lambda: self.uuid.UUID("123_4567812345678123456781234567"))
281-
badvalue(lambda: self.uuid.UUID("123_4567812345678123456781_23456"))
280+
badvalue(lambda: self.uuid.UUID('123_4567812345678123456781234567'))
281+
badvalue(lambda: self.uuid.UUID('123_4567812345678123456781_23456'))
282+
badvalue(lambda: self.uuid.UUID('123_4567812345678123456781_23456'))
282283
badvalue(lambda: self.uuid.UUID('1234567812345678123456781234567'))
283284
badvalue(lambda: self.uuid.UUID('123456781234567812345678123456789'))
284285
badvalue(lambda: self.uuid.UUID('123456781234567812345678z2345678'))
286+
badvalue(lambda: self.uuid.UUID('0x123456781234567812345678z23456'))
287+
badvalue(lambda: self.uuid.UUID('0X123456781234567812345678z23456'))
288+
badvalue(lambda: self.uuid.UUID('+123456781234567812345678z234567'))
289+
badvalue(lambda: self.uuid.UUID(' 123456781234567812345678z23456 '))
290+
badvalue(lambda: self.uuid.UUID(' 123456781234567812345678z2345 '))
285291

286292
# Badly formed bytes.
287293
badvalue(lambda: self.uuid.UUID(bytes='abc'))

Lib/uuid.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
"""
5858

5959
import os
60+
import re
6061
import sys
6162
import time
6263

@@ -214,8 +215,8 @@ def __init__(self, hex=None, bytes=None, bytes_le=None, fields=None,
214215
pass
215216
elif hex is not None:
216217
hex = hex.replace('urn:', '').replace('uuid:', '')
217-
hex = hex.strip("{}").replace("-", "").replace("_", "")
218-
if len(hex) != 32:
218+
hex = hex.strip('{}').replace('-', '')
219+
if not re.fullmatch(r'[0-9A-Fa-f]{32}', hex):
219220
raise ValueError('badly formed hexadecimal UUID string')
220221
int = int_(hex, 16)
221222
elif bytes_le is not None:

0 commit comments

Comments
 (0)