mirror of
https://github.com/python/cpython.git
synced 2025-09-01 14:38:00 +00:00
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') ........
This commit is contained in:
parent
77b31ef202
commit
e5344d6c45
3 changed files with 11 additions and 0 deletions
|
@ -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?
|
||||||
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,
|
||||||
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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue