Kaydet (Commit) e5344d6c authored tarafından Amaury Forgeot d'Arc's avatar Amaury Forgeot d'Arc

Merged revisions 73698 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r73698 | amaury.forgeotdarc | 2009-06-30 00:36:49 +0200 (mar., 30 juin 2009) | 7 lines

  #6373: SystemError in str.encode('latin1', 'surrogateescape')
  if the string contains unpaired surrogates.
  (In debug build, crash in assert())

  This can happen with normal processing, if python starts with utf-8,
  then calls sys.setfilesystemencoding('latin-1')
........
üst 77b31ef2
...@@ -1549,6 +1549,11 @@ class SurrogateEscapeTest(unittest.TestCase): ...@@ -1549,6 +1549,11 @@ class SurrogateEscapeTest(unittest.TestCase):
self.assertEqual("foo\udca5bar".encode("iso-8859-3", "surrogateescape"), self.assertEqual("foo\udca5bar".encode("iso-8859-3", "surrogateescape"),
b"foo\xa5bar") b"foo\xa5bar")
def test_latin1(self):
# Issue6373
self.assertEqual("\udce4\udceb\udcef\udcf6\udcfc".encode("latin1", "surrogateescape"),
b"\xe4\xeb\xef\xf6\xfc")
def test_main(): def test_main():
support.run_unittest( support.run_unittest(
......
...@@ -12,6 +12,10 @@ What's New in Python 3.1.1? ...@@ -12,6 +12,10 @@ What's New in Python 3.1.1?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #6373: Fixed a RuntimeError when encoding with the latin-1 codec and
the 'surrogateescape' error handler, a string which contains unpaired
surrogates.
Library Library
------- -------
......
...@@ -4201,10 +4201,12 @@ static PyObject *unicode_encode_ucs1(const Py_UNICODE *p, ...@@ -4201,10 +4201,12 @@ static PyObject *unicode_encode_ucs1(const Py_UNICODE *p,
repsize = PyBytes_Size(repunicode); repsize = PyBytes_Size(repunicode);
if (repsize > 1) { if (repsize > 1) {
/* Make room for all additional bytes. */ /* Make room for all additional bytes. */
respos = str - PyBytes_AS_STRING(res);
if (_PyBytes_Resize(&res, ressize+repsize-1)) { if (_PyBytes_Resize(&res, ressize+repsize-1)) {
Py_DECREF(repunicode); Py_DECREF(repunicode);
goto onError; goto onError;
} }
str = PyBytes_AS_STRING(res) + respos;
ressize += repsize-1; ressize += repsize-1;
} }
memcpy(str, PyBytes_AsString(repunicode), repsize); memcpy(str, PyBytes_AsString(repunicode), repsize);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment