# 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);