From c92ea76f3f43e367e9bf5fd12713c3b99ffad84a Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 29 Jan 2014 11:33:26 +0200 Subject: [PATCH] Issue #20424: Python implementation of io.StringIO now supports lone surrogates. --- Lib/_pyio.py | 2 +- Lib/test/test_memoryio.py | 9 +++++++++ Misc/NEWS | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Lib/_pyio.py b/Lib/_pyio.py index aab60db4be0..a9b00640f9d 100644 --- a/Lib/_pyio.py +++ b/Lib/_pyio.py @@ -2044,7 +2044,7 @@ class StringIO(TextIOWrapper): def __init__(self, initial_value="", newline="\n"): super(StringIO, self).__init__(BytesIO(), encoding="utf-8", - errors="strict", + errors="surrogatepass", newline=newline) # Issue #5645: make universal newlines semantics the same as in the # C version, even under Windows. diff --git a/Lib/test/test_memoryio.py b/Lib/test/test_memoryio.py index d611a3138b2..50c91ab20da 100644 --- a/Lib/test/test_memoryio.py +++ b/Lib/test/test_memoryio.py @@ -609,6 +609,15 @@ class PyStringIOTest(MemoryTestMixin, MemorySeekTestMixin, UnsupportedOperation = pyio.UnsupportedOperation EOF = "" + def test_lone_surrogates(self): + # Issue #20424 + memio = self.ioclass('\ud800') + self.assertEqual(memio.read(), '\ud800') + + memio = self.ioclass() + memio.write('\ud800') + self.assertEqual(memio.getvalue(), '\ud800') + class PyStringIOPickleTest(TextIOTestMixin, unittest.TestCase): """Test if pickle restores properly the internal state of StringIO. diff --git a/Misc/NEWS b/Misc/NEWS index c52ca189eae..8b24dc36690 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -50,6 +50,8 @@ Core and Builtins Library ------- +- Issue #20424: Python implementation of io.StringIO now supports lone surrogates. + - Issue #19456: ntpath.join() now joins relative paths correctly when a drive is present.