diff options
author | Miss Skeleton (bot) <31488909+miss-islington@users.noreply.github.com> | 2020-10-20 08:05:40 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-20 08:05:40 (GMT) |
commit | d1eb75585ef4c108732ec815cdc0adef087b1c3e (patch) | |
tree | 468d54e48a8e487b27872265d841f7e0dff50dce | |
parent | e7c5a43984f82ef9634cb0b2b8c4750b2fd431a0 (diff) | |
download | cpython-d1eb75585ef4c108732ec815cdc0adef087b1c3e.zip cpython-d1eb75585ef4c108732ec815cdc0adef087b1c3e.tar.gz cpython-d1eb75585ef4c108732ec815cdc0adef087b1c3e.tar.bz2 |
bpo-41491: plistlib: accept hexadecimal integer values in xml plist files (GH-22764) (GH-22807)
(cherry picked from commit 3185267400be853404f22a1e06bb9fe1210735c7)
Co-authored-by: Ronald Oussoren <ronaldoussoren@mac.com>
Co-authored-by: Ronald Oussoren <ronaldoussoren@mac.com>
-rw-r--r-- | Lib/plistlib.py | 6 | ||||
-rw-r--r-- | Lib/test/test_plistlib.py | 13 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2020-10-19-14-02-09.bpo-41491.d1BUWH.rst | 1 |
3 files changed, 19 insertions, 1 deletions
diff --git a/Lib/plistlib.py b/Lib/plistlib.py index 533ed13..9813613 100644 --- a/Lib/plistlib.py +++ b/Lib/plistlib.py @@ -364,7 +364,11 @@ class _PlistParser: self.add_object(False) def end_integer(self): - self.add_object(int(self.get_data())) + raw = self.get_data() + if raw.startswith('0x') or raw.startswith('0X'): + self.add_object(int(raw, 16)) + else: + self.add_object(int(raw)) def end_real(self): self.add_object(float(self.get_data())) diff --git a/Lib/test/test_plistlib.py b/Lib/test/test_plistlib.py index de1c848..d714880 100644 --- a/Lib/test/test_plistlib.py +++ b/Lib/test/test_plistlib.py @@ -499,6 +499,19 @@ class TestPlistlib(unittest.TestCase): self.assertRaises(ValueError, plistlib.loads, b"<plist><integer>not real</integer></plist>") + def test_integer_notations(self): + pl = b"<plist><integer>456</integer></plist>" + value = plistlib.loads(pl) + self.assertEqual(value, 456) + + pl = b"<plist><integer>0xa</integer></plist>" + value = plistlib.loads(pl) + self.assertEqual(value, 10) + + pl = b"<plist><integer>0123</integer></plist>" + value = plistlib.loads(pl) + self.assertEqual(value, 123) + def test_xml_encodings(self): base = TESTDATA[plistlib.FMT_XML] diff --git a/Misc/NEWS.d/next/Library/2020-10-19-14-02-09.bpo-41491.d1BUWH.rst b/Misc/NEWS.d/next/Library/2020-10-19-14-02-09.bpo-41491.d1BUWH.rst new file mode 100644 index 0000000..4f39c91 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2020-10-19-14-02-09.bpo-41491.d1BUWH.rst @@ -0,0 +1 @@ +plistlib: fix parsing XML plists with hexadecimal integer values |