Commit f5ca1a21 authored by Victor Stinner's avatar Victor Stinner

PyUnicode_CopyCharacters() fails if 'to' has more than 1 reference

parent 7c8c1ea3
......@@ -522,7 +522,8 @@ PyAPI_FUNC(int) _PyUnicode_Ready(
character conversion when necessary and falls back to memcpy if possible.
Fail if 'to' is smaller than how_many or smaller than len(from)-from_start,
or if kind(from[from_start:from_start+how_many]) > kind(to).
or if kind(from[from_start:from_start+how_many]) > kind(to), or if to has
more than 1 reference.
Return the number of written character, or return -1 and raise an exception
on error.
......
......@@ -631,6 +631,14 @@ PyUnicode_CopyCharacters(PyObject *to, Py_ssize_t to_start,
how_many, to_start, PyUnicode_GET_LENGTH(to));
return -1;
}
if (how_many == 0)
return 0;
if (Py_REFCNT(to) != 1) {
PyErr_SetString(PyExc_ValueError,
"Cannot modify a string having more than 1 reference");
return -1;
}
from_kind = PyUnicode_KIND(from);
to_kind = PyUnicode_KIND(to);
......
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