diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-10-08 19:46:01 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-10-08 19:46:01 (GMT) |
commit | 21d9f10c9442ba646340913beba8cf73cc77c885 (patch) | |
tree | 177253021450ca18b21878fc16704420c93433ce /Objects/unicodeobject.c | |
parent | c6f9b2b7f5f3640ce8aeac4aff67f75821891d81 (diff) | |
parent | 9c0e1f83af433a9eebb70cd41adcff2b0d608e05 (diff) | |
download | cpython-21d9f10c9442ba646340913beba8cf73cc77c885.zip cpython-21d9f10c9442ba646340913beba8cf73cc77c885.tar.gz cpython-21d9f10c9442ba646340913beba8cf73cc77c885.tar.bz2 |
Merge from 3.5.
Diffstat (limited to 'Objects/unicodeobject.c')
-rw-r--r-- | Objects/unicodeobject.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 298cd23..b58cf02 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -1549,15 +1549,19 @@ PyUnicode_CopyCharacters(PyObject *to, Py_ssize_t to_start, if (PyUnicode_READY(to) == -1) return -1; - if (from_start < 0) { + if ((size_t)from_start > (size_t)PyUnicode_GET_LENGTH(from)) { PyErr_SetString(PyExc_IndexError, "string index out of range"); return -1; } - if (to_start < 0) { + if ((size_t)to_start > (size_t)PyUnicode_GET_LENGTH(to)) { PyErr_SetString(PyExc_IndexError, "string index out of range"); return -1; } - how_many = Py_MIN(PyUnicode_GET_LENGTH(from), how_many); + if (how_many < 0) { + PyErr_SetString(PyExc_SystemError, "how_many cannot be negative"); + return -1; + } + how_many = Py_MIN(PyUnicode_GET_LENGTH(from)-from_start, how_many); if (to_start + how_many > PyUnicode_GET_LENGTH(to)) { PyErr_Format(PyExc_SystemError, "Cannot write %zi characters at %zi " |