Skip to content

Commit d1eb755

Browse files
bpo-41491: plistlib: accept hexadecimal integer values in xml plist files (GH-22764) (GH-22807)
(cherry picked from commit 3185267) Co-authored-by: Ronald Oussoren <[email protected]> Co-authored-by: Ronald Oussoren <[email protected]>
1 parent e7c5a43 commit d1eb755

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

Lib/plistlib.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,11 @@ def end_false(self):
364364
self.add_object(False)
365365

366366
def end_integer(self):
367-
self.add_object(int(self.get_data()))
367+
raw = self.get_data()
368+
if raw.startswith('0x') or raw.startswith('0X'):
369+
self.add_object(int(raw, 16))
370+
else:
371+
self.add_object(int(raw))
368372

369373
def end_real(self):
370374
self.add_object(float(self.get_data()))

Lib/test/test_plistlib.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,19 @@ def test_invalidreal(self):
499499
self.assertRaises(ValueError, plistlib.loads,
500500
b"<plist><integer>not real</integer></plist>")
501501

502+
def test_integer_notations(self):
503+
pl = b"<plist><integer>456</integer></plist>"
504+
value = plistlib.loads(pl)
505+
self.assertEqual(value, 456)
506+
507+
pl = b"<plist><integer>0xa</integer></plist>"
508+
value = plistlib.loads(pl)
509+
self.assertEqual(value, 10)
510+
511+
pl = b"<plist><integer>0123</integer></plist>"
512+
value = plistlib.loads(pl)
513+
self.assertEqual(value, 123)
514+
502515
def test_xml_encodings(self):
503516
base = TESTDATA[plistlib.FMT_XML]
504517

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
plistlib: fix parsing XML plists with hexadecimal integer values

0 commit comments

Comments
 (0)