[Python-checkins] cpython (merge 3.6 -> default): Issue #28321: Fixed writing non-BMP characters with binary format in plistlib.
serhiy.storchaka
python-checkins at python.org
Tue Oct 4 13:09:38 EDT 2016
https://hg.python.org/cpython/rev/b6c85e7e558a
changeset: 104286:b6c85e7e558a
parent: 104283:927e05b747d1
parent: 104285:3a7234d04fe9
user: Serhiy Storchaka <storchaka at gmail.com>
date: Tue Oct 04 20:08:59 2016 +0300
summary:
Issue #28321: Fixed writing non-BMP characters with binary format in plistlib.
files:
Lib/plistlib.py | 2 +-
Lib/test/test_plistlib.py | 7 +++++++
Misc/NEWS | 2 ++
3 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/Lib/plistlib.py b/Lib/plistlib.py
--- a/Lib/plistlib.py
+++ b/Lib/plistlib.py
@@ -918,7 +918,7 @@
self._write_size(0x50, len(value))
except UnicodeEncodeError:
t = value.encode('utf-16be')
- self._write_size(0x60, len(value))
+ self._write_size(0x60, len(t) // 2)
self._fp.write(t)
diff --git a/Lib/test/test_plistlib.py b/Lib/test/test_plistlib.py
--- a/Lib/test/test_plistlib.py
+++ b/Lib/test/test_plistlib.py
@@ -360,6 +360,13 @@
plistlib.dumps,
testString)
+ def test_non_bmp_characters(self):
+ pl = {'python': '\U0001f40d'}
+ for fmt in ALL_FORMATS:
+ with self.subTest(fmt=fmt):
+ data = plistlib.dumps(pl, fmt=fmt)
+ self.assertEqual(plistlib.loads(data), pl)
+
def test_nondictroot(self):
for fmt in ALL_FORMATS:
with self.subTest(fmt=fmt):
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -58,6 +58,8 @@
Library
-------
+- Issue #28321: Fixed writing non-BMP characters with binary format in plistlib.
+
- Issue #28225: bz2 module now supports pathlib. Initial patch by Ethan Furman.
- Issue #28227: gzip now supports pathlib. Patch by Ethan Furman.
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list