diff options
author | Victor Stinner <vstinner@redhat.com> | 2018-11-27 11:41:17 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-27 11:41:17 (GMT) |
commit | 163403a63e9272fcd14707e344122c2e3c5e0244 (patch) | |
tree | cf6696176f8b518731634aefc7d0f82630696cc1 /Objects | |
parent | cfaafda8e3e19764682abb4bd4c574accb784c42 (diff) | |
download | cpython-163403a63e9272fcd14707e344122c2e3c5e0244.zip cpython-163403a63e9272fcd14707e344122c2e3c5e0244.tar.gz cpython-163403a63e9272fcd14707e344122c2e3c5e0244.tar.bz2 |
bpo-33954: Fix compiler warning in _PyUnicode_FastFill() (GH-10737)
'data' argument of unicode_fill() is modified, so it must not be
constant.
Add more assertions to unicode_fill(): check the maximum character
value.
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/unicodeobject.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index cdfc2f6..2b1db91 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -228,12 +228,14 @@ unicode_fill(enum PyUnicode_Kind kind, void *data, Py_UCS4 value, assert(kind != PyUnicode_WCHAR_KIND); switch (kind) { case PyUnicode_1BYTE_KIND: { + assert(value <= 0xff); Py_UCS1 ch = (unsigned char)value; Py_UCS1 *to = (Py_UCS1 *)data + start; memset(to, ch, length); break; } case PyUnicode_2BYTE_KIND: { + assert(value <= 0xffff); Py_UCS2 ch = (Py_UCS2)value; Py_UCS2 *to = (Py_UCS2 *)data + start; const Py_UCS2 *end = to + length; @@ -241,6 +243,7 @@ unicode_fill(enum PyUnicode_Kind kind, void *data, Py_UCS4 value, break; } case PyUnicode_4BYTE_KIND: { + assert(value <= MAX_UNICODE); Py_UCS4 ch = value; Py_UCS4 * to = (Py_UCS4 *)data + start; const Py_UCS4 *end = to + length; @@ -10117,7 +10120,7 @@ _PyUnicode_FastFill(PyObject *unicode, Py_ssize_t start, Py_ssize_t length, Py_UCS4 fill_char) { const enum PyUnicode_Kind kind = PyUnicode_KIND(unicode); - const void *data = PyUnicode_DATA(unicode); + void *data = PyUnicode_DATA(unicode); assert(PyUnicode_IS_READY(unicode)); assert(unicode_modifiable(unicode)); assert(fill_char <= PyUnicode_MAX_CHAR_VALUE(unicode)); |