Issue #28774: Fix start/end pos in unicode_encode_ucs1().

Fix error position of the unicode error in ASCII and Latin1
encoders when a string returned by the error handler contains multiple
non-encodable characters (non-ASCII for the ASCII codec, characters out
of the U+0000-U+00FF range for Latin1).
This commit is contained in:
Xiang Zhang 2016-11-23 19:34:01 +08:00
parent 726a57d45f
commit d04d8474df
2 changed files with 7 additions and 2 deletions

View File

@ -10,6 +10,11 @@ What's New in Python 3.7.0 alpha 1
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #28774: Fix error position of the unicode error in ASCII and Latin1
encoders when a string returned by the error handler contains multiple
non-encodable characters (non-ASCII for the ASCII codec, characters out
of the U+0000-U+00FF range for Latin1).
- Issue #28731: Optimize _PyDict_NewPresized() to create correct size dict. - Issue #28731: Optimize _PyDict_NewPresized() to create correct size dict.
Improve speed of dict literal with constant keys up to 30%. Improve speed of dict literal with constant keys up to 30%.

View File

@ -6798,7 +6798,7 @@ unicode_encode_ucs1(PyObject *unicode,
goto onError; goto onError;
/* subtract preallocated bytes */ /* subtract preallocated bytes */
writer.min_size -= 1; writer.min_size -= newpos - collstart;
if (PyBytes_Check(rep)) { if (PyBytes_Check(rep)) {
/* Directly copy bytes result to output. */ /* Directly copy bytes result to output. */
@ -6835,7 +6835,7 @@ unicode_encode_ucs1(PyObject *unicode,
ch = PyUnicode_READ_CHAR(rep, i); ch = PyUnicode_READ_CHAR(rep, i);
if (ch >= limit) { if (ch >= limit) {
raise_encode_exception(&exc, encoding, unicode, raise_encode_exception(&exc, encoding, unicode,
pos, pos+1, reason); collstart, collend, reason);
goto onError; goto onError;
} }
*str = (char)ch; *str = (char)ch;