From cd8295ff758891f21084a6a5ad3403d35dda38f7 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 11 Apr 2020 10:48:40 +0300 Subject: bpo-39943: Add the const qualifier to pointers on non-mutable PyUnicode data. (GH-19345) --- Python/_warnings.c | 4 ++-- Python/ast.c | 2 +- Python/codecs.c | 26 ++++++++++++-------------- Python/formatter_unicode.c | 6 +++--- Python/getargs.c | 2 +- Python/traceback.c | 4 ++-- 6 files changed, 21 insertions(+), 23 deletions(-) (limited to 'Python') diff --git a/Python/_warnings.c b/Python/_warnings.c index fd3ca60e5d..e4dfb7391e 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -435,7 +435,7 @@ normalize_module(PyObject *filename) { PyObject *module; int kind; - void *data; + const void *data; Py_ssize_t len; len = PyUnicode_GetLength(filename); @@ -519,7 +519,7 @@ show_warning(PyObject *filename, int lineno, PyObject *text, /* Print " source_line\n" */ if (sourceline) { int kind; - void *data; + const void *data; Py_ssize_t i, len; Py_UCS4 ch; PyObject *truncated; diff --git a/Python/ast.c b/Python/ast.c index 0f23f6762d..1a4a3110e6 100644 --- a/Python/ast.c +++ b/Python/ast.c @@ -4588,7 +4588,7 @@ decode_unicode_with_escapes(struct compiling *c, const node *n, const char *s, if (*s & 0x80) { /* XXX inefficient */ PyObject *w; int kind; - void *data; + const void *data; Py_ssize_t len, i; w = decode_utf8(c, &s, end); if (w == NULL) { diff --git a/Python/codecs.c b/Python/codecs.c index bbbf774780..7b35ded2ed 100644 --- a/Python/codecs.c +++ b/Python/codecs.c @@ -701,8 +701,7 @@ PyObject *PyCodec_ReplaceErrors(PyObject *exc) if (PyObject_TypeCheck(exc, (PyTypeObject *)PyExc_UnicodeEncodeError)) { PyObject *res; - int kind; - void *data; + Py_UCS1 *outp; if (PyUnicodeEncodeError_GetStart(exc, &start)) return NULL; if (PyUnicodeEncodeError_GetEnd(exc, &end)) @@ -711,10 +710,10 @@ PyObject *PyCodec_ReplaceErrors(PyObject *exc) res = PyUnicode_New(len, '?'); if (res == NULL) return NULL; - kind = PyUnicode_KIND(res); - data = PyUnicode_DATA(res); + assert(PyUnicode_KIND(res) == PyUnicode_1BYTE_KIND); + outp = PyUnicode_1BYTE_DATA(res); for (i = 0; i < len; ++i) - PyUnicode_WRITE(kind, data, i, '?'); + outp[i] = '?'; assert(_PyUnicode_CheckConsistency(res, 1)); return Py_BuildValue("(Nn)", res, end); } @@ -727,8 +726,7 @@ PyObject *PyCodec_ReplaceErrors(PyObject *exc) } else if (PyObject_TypeCheck(exc, (PyTypeObject *)PyExc_UnicodeTranslateError)) { PyObject *res; - int kind; - void *data; + Py_UCS2 *outp; if (PyUnicodeTranslateError_GetStart(exc, &start)) return NULL; if (PyUnicodeTranslateError_GetEnd(exc, &end)) @@ -737,10 +735,10 @@ PyObject *PyCodec_ReplaceErrors(PyObject *exc) res = PyUnicode_New(len, Py_UNICODE_REPLACEMENT_CHARACTER); if (res == NULL) return NULL; - kind = PyUnicode_KIND(res); - data = PyUnicode_DATA(res); - for (i=0; i < len; i++) - PyUnicode_WRITE(kind, data, i, Py_UNICODE_REPLACEMENT_CHARACTER); + assert(PyUnicode_KIND(res) == PyUnicode_2BYTE_KIND); + outp = PyUnicode_2BYTE_DATA(res); + for (i = 0; i < len; i++) + outp[i] = Py_UNICODE_REPLACEMENT_CHARACTER; assert(_PyUnicode_CheckConsistency(res, 1)); return Py_BuildValue("(Nn)", res, end); } @@ -759,7 +757,7 @@ PyObject *PyCodec_XMLCharRefReplaceErrors(PyObject *exc) Py_ssize_t start; Py_ssize_t end; PyObject *res; - unsigned char *outp; + Py_UCS1 *outp; Py_ssize_t ressize; Py_UCS4 ch; if (PyUnicodeEncodeError_GetStart(exc, &start)) @@ -855,7 +853,7 @@ PyObject *PyCodec_BackslashReplaceErrors(PyObject *exc) Py_ssize_t start; Py_ssize_t end; PyObject *res; - unsigned char *outp; + Py_UCS1 *outp; int ressize; Py_UCS4 c; @@ -966,7 +964,7 @@ PyObject *PyCodec_NameReplaceErrors(PyObject *exc) Py_ssize_t start; Py_ssize_t end; PyObject *res; - unsigned char *outp; + Py_UCS1 *outp; Py_ssize_t ressize; int replsize; Py_UCS4 c; diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c index 841b25a43f..74638ca223 100644 --- a/Python/formatter_unicode.c +++ b/Python/formatter_unicode.c @@ -62,7 +62,7 @@ get_integer(PyObject *str, Py_ssize_t *ppos, Py_ssize_t end, Py_ssize_t accumulator, digitval, pos = *ppos; int numdigits; int kind = PyUnicode_KIND(str); - void *data = PyUnicode_DATA(str); + const void *data = PyUnicode_DATA(str); accumulator = numdigits = 0; for (; pos < end; pos++, numdigits++) { @@ -170,7 +170,7 @@ parse_internal_render_format_spec(PyObject *format_spec, { Py_ssize_t pos = start; int kind = PyUnicode_KIND(format_spec); - void *data = PyUnicode_DATA(format_spec); + const void *data = PyUnicode_DATA(format_spec); /* end-pos is used throughout this code to specify the length of the input string */ #define READ_spec(index) PyUnicode_READ(kind, data, index) @@ -443,7 +443,7 @@ parse_number(PyObject *s, Py_ssize_t pos, Py_ssize_t end, { Py_ssize_t remainder; int kind = PyUnicode_KIND(s); - void *data = PyUnicode_DATA(s); + const void *data = PyUnicode_DATA(s); while (pos