Issue #26464: Fix unicode_fast_translate() again

Initialize i variable if the string is non-ASCII.
This commit is contained in:
Victor Stinner 2016-03-01 21:59:58 +01:00
parent 6c9aa8f2bf
commit 337986740f
2 changed files with 22 additions and 13 deletions

View file

@ -8582,10 +8582,6 @@ unicode_fast_translate(PyObject *input, PyObject *mapping,
Py_UCS1 *in, *end, *out;
int res = 0;
if (PyUnicode_READY(input) == -1)
return -1;
if (!PyUnicode_IS_ASCII(input))
return 0;
len = PyUnicode_GET_LENGTH(input);
memset(ascii_table, 0xff, 128);
@ -8668,13 +8664,20 @@ _PyUnicode_TranslateCharmap(PyObject *input,
ignore = (errors != NULL && strcmp(errors, "ignore") == 0);
res = unicode_fast_translate(input, mapping, &writer, ignore, &i);
if (res < 0) {
_PyUnicodeWriter_Dealloc(&writer);
if (PyUnicode_READY(input) == -1)
return NULL;
if (PyUnicode_IS_ASCII(input)) {
res = unicode_fast_translate(input, mapping, &writer, ignore, &i);
if (res < 0) {
_PyUnicodeWriter_Dealloc(&writer);
return NULL;
}
if (res == 1)
return _PyUnicodeWriter_Finish(&writer);
}
else {
i = 0;
}
if (res == 1)
return _PyUnicodeWriter_Finish(&writer);
while (i<size) {
/* try to encode it */