From 163403a63e9272fcd14707e344122c2e3c5e0244 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 27 Nov 2018 12:41:17 +0100 Subject: [PATCH] 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. --- Objects/unicodeobject.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index cdfc2f6f219..2b1db918a15 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));