summaryrefslogtreecommitdiff
path: root/Lib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2016-10-04 20:08:29 +0300
committerSerhiy Storchaka <storchaka@gmail.com>2016-10-04 20:08:29 +0300
commitdb8d6265fa86a7cb9d7c5e4d60e3b342edc90176 (patch)
tree08a881907b27ab5cfe8ffc3a6e4e84a797bb338f /Lib
parent27b40981f7529f2be8031fe4cfd5e5391f789743 (diff)
parent7338ebc4ba00366fa2c4f592630c2acd98c178d8 (diff)
downloadcpython-git-db8d6265fa86a7cb9d7c5e4d60e3b342edc90176.tar.gz
Issue #28321: Fixed writing non-BMP characters with binary format in plistlib.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/plistlib.py2
-rw-r--r--Lib/test/test_plistlib.py7
2 files changed, 8 insertions, 1 deletions
diff --git a/Lib/plistlib.py b/Lib/plistlib.py
index 4f360f3220..09be5fd369 100644
--- a/Lib/plistlib.py
+++ b/Lib/plistlib.py
@@ -918,7 +918,7 @@ class _BinaryPlistWriter (object):
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
index 60ff9183c2..c77a6bf9d0 100644
--- a/Lib/test/test_plistlib.py
+++ b/Lib/test/test_plistlib.py
@@ -360,6 +360,13 @@ class TestPlistlib(unittest.TestCase):
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):