# HG changeset patch # User vlad # Date 1365888714 14400 # Node ID 75b1e28430d632a2cf9665a6fdf23aa2f5e72541 # Parent 9e7d31b04d781dcf19ae4231c559684e8c1efd91 Fix to the Issue17694 diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -12892,13 +12892,11 @@ newlen = writer->pos + length; if (writer->buffer == NULL) { - if (writer->overallocate) { + if (writer->overallocate && newlen <= (PY_SSIZE_T_MAX - newlen / 4)) /* overallocate 25% to limit the number of resize */ - if (newlen <= (PY_SSIZE_T_MAX - newlen / 4)) - newlen += newlen / 4; - if (newlen < writer->min_length) - newlen = writer->min_length; - } + newlen += newlen / 4; + if (newlen < writer->min_length) + newlen = writer->min_length; writer->buffer = PyUnicode_New(newlen, maxchar); if (writer->buffer == NULL) return -1; @@ -12907,14 +12905,11 @@ } if (newlen > writer->size) { - if (writer->overallocate) { + if (writer->overallocate && newlen <= (PY_SSIZE_T_MAX - newlen / 4)) /* overallocate 25% to limit the number of resize */ - if (newlen <= (PY_SSIZE_T_MAX - newlen / 4)) - newlen += newlen / 4; - if (newlen < writer->min_length) - newlen = writer->min_length; - } - + newlen += newlen / 4; + if (newlen < writer->min_length) + newlen = writer->min_length; if (maxchar > writer->maxchar || writer->readonly) { /* resize + widen */ newbuffer = PyUnicode_New(newlen, maxchar);