Issue #23321: Fixed a crash in str.decode() when error handler returned

replacment string longer than mailformed input data.
This commit is contained in:
Serhiy Storchaka 2015-01-26 01:22:54 +02:00
parent 1923b627b5
commit 7e4b9057b3
2 changed files with 9 additions and 2 deletions

View file

@ -11,6 +11,9 @@ Release date: TBA
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #23321: Fixed a crash in str.decode() when error handler returned
replacment string longer than mailformed input data.
- Issue #23048: Fix jumping out of an infinite while loop in the pdb. - Issue #23048: Fix jumping out of an infinite while loop in the pdb.
- Issue #20335: bytes constructor now raises TypeError when encoding or errors - Issue #20335: bytes constructor now raises TypeError when encoding or errors

View file

@ -4190,9 +4190,13 @@ unicode_decode_call_errorhandler_writer(
if (PyUnicode_READY(repunicode) < 0) if (PyUnicode_READY(repunicode) < 0)
goto onError; goto onError;
replen = PyUnicode_GET_LENGTH(repunicode); replen = PyUnicode_GET_LENGTH(repunicode);
writer->min_length += replen; if (replen > 1) {
if (replen > 1) writer->min_length += replen - 1;
writer->overallocate = 1; writer->overallocate = 1;
if (_PyUnicodeWriter_Prepare(writer, writer->min_length,
PyUnicode_MAX_CHAR_VALUE(repunicode)) == -1)
goto onError;
}
if (_PyUnicodeWriter_WriteStr(writer, repunicode) == -1) if (_PyUnicodeWriter_WriteStr(writer, repunicode) == -1)
goto onError; goto onError;