summaryrefslogtreecommitdiffstats
path: root/Lib/plistlib.py
diff options
context:
space:
mode:
authorRonald Oussoren <ronaldoussoren@mac.com>2014-02-06 10:19:18 (GMT)
committerRonald Oussoren <ronaldoussoren@mac.com>2014-02-06 10:19:18 (GMT)
commit94e44a935b3dc1e67a6a3357f64324ee0c81d40c (patch)
tree7c8a8cb61491ec46dbe5e2042aa7fcaee4785fab /Lib/plistlib.py
parent3dcb0cf9b195afc9d3a5c79f8b0a6cd755bc7bd0 (diff)
downloadcpython-94e44a935b3dc1e67a6a3357f64324ee0c81d40c.zip
cpython-94e44a935b3dc1e67a6a3357f64324ee0c81d40c.tar.gz
cpython-94e44a935b3dc1e67a6a3357f64324ee0c81d40c.tar.bz2
Issue #14455: fix handling of unsigned long long values for binary plist files
Values in the range of an unsigned long long, but outside of the range of a signed long long were serialized as a negative value. Due to a bug in PyObjC my test scripts indicated that the previous behavior matched Apple's plist code, instead the handle large unsigned values correctly. The change to plistlib.py is from a patch by Serhiy.
Diffstat (limited to 'Lib/plistlib.py')
-rw-r--r--Lib/plistlib.py11
1 files changed, 6 insertions, 5 deletions
diff --git a/Lib/plistlib.py b/Lib/plistlib.py
index 8286456..dcb0f9c 100644
--- a/Lib/plistlib.py
+++ b/Lib/plistlib.py
@@ -879,18 +879,19 @@ class _BinaryPlistWriter (object):
try:
self._fp.write(struct.pack('>Bq', 0x13, value))
except struct.error:
- raise OverflowError(value)
+ raise OverflowError(value) from None
elif value < 1 << 8:
self._fp.write(struct.pack('>BB', 0x10, value))
elif value < 1 << 16:
self._fp.write(struct.pack('>BH', 0x11, value))
elif value < 1 << 32:
self._fp.write(struct.pack('>BL', 0x12, value))
+ elif value < 1 << 63:
+ self._fp.write(struct.pack('>BQ', 0x13, value))
+ elif value < 1 << 64:
+ self._fp.write(b'\x14' + value.to_bytes(16, 'big', signed=True))
else:
- try:
- self._fp.write(struct.pack('>BQ', 0x13, value))
- except struct.error:
- raise OverflowError(value)
+ raise OverflowError(value)
elif isinstance(value, float):
self._fp.write(struct.pack('>Bd', 0x23, value))