summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Skeleton (bot) <31488909+miss-islington@users.noreply.github.com>2020-10-20 08:05:40 (GMT)
committerGitHub <noreply@github.com>2020-10-20 08:05:40 (GMT)
commitd1eb75585ef4c108732ec815cdc0adef087b1c3e (patch)
tree468d54e48a8e487b27872265d841f7e0dff50dce
parente7c5a43984f82ef9634cb0b2b8c4750b2fd431a0 (diff)
downloadcpython-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.py6
-rw-r--r--Lib/test/test_plistlib.py13
-rw-r--r--Misc/NEWS.d/next/Library/2020-10-19-14-02-09.bpo-41491.d1BUWH.rst1
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