diff options
Diffstat (limited to 'Objects/stringobject.c')
-rw-r--r-- | Objects/stringobject.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 748592e..acfce8b 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -933,6 +933,7 @@ static PyObject * string_repeat(register PyStringObject *a, register int n) { register int i; + register int j; register int size; register PyStringObject *op; size_t nbytes; @@ -965,8 +966,16 @@ string_repeat(register PyStringObject *a, register int n) PyObject_INIT_VAR(op, &PyString_Type, size); op->ob_shash = -1; op->ob_sstate = SSTATE_NOT_INTERNED; - for (i = 0; i < size; i += a->ob_size) - memcpy(op->ob_sval+i, a->ob_sval, (int) a->ob_size); + i = 0; + if (i < size) { + memcpy(op->ob_sval, a->ob_sval, (int) a->ob_size); + i = (int) a->ob_size; + } + while (i < size) { + j = (i <= size-i) ? i : size-i; + memcpy(op->ob_sval+i, op->ob_sval, j); + i += j; + } op->ob_sval[size] = '\0'; return (PyObject *) op; } |