Kaydet (Commit) 1c4a4576 authored tarafından Guido van Rossum's avatar Guido van Rossum

Backport 2.166 from trunk:

Fix SF bug 599128, submitted by Inyeol Lee: .replace() would do the
wrong thing for a unicode subclass when there were zero string
replacements.  The example given in the SF bug report was only one way
to trigger this; replacing a string of length >= 2 that's not found is
another.  The code would actually write outside allocated memory if
replacement string was longer than the search string.
üst 39a8654e
......@@ -3509,10 +3509,16 @@ PyObject *replace(PyUnicodeObject *self,
n = count(self, 0, self->length, str1);
if (n > maxcount)
n = maxcount;
if (n == 0 && PyUnicode_CheckExact(self)) {
if (n == 0) {
/* nothing to replace, return original string */
Py_INCREF(self);
u = self;
if (PyUnicode_CheckExact(self)) {
Py_INCREF(self);
u = self;
}
else {
u = (PyUnicodeObject *)
PyUnicode_FromUnicode(self->str, self->length);
}
} else {
u = _PyUnicode_New(
self->length + n * (str2->length - str1->length));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment