diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2020-11-18 16:01:48 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-18 16:01:48 (GMT) |
commit | 994c68f586441cee755508e9357e6e03e2b7a887 (patch) | |
tree | 28312823d8d46acaa8f72a7c1e7dc7f3728f8f41 | |
parent | 802ff7c0d339376a1b974e57d2caca898310de3d (diff) | |
download | cpython-994c68f586441cee755508e9357e6e03e2b7a887.zip cpython-994c68f586441cee755508e9357e6e03e2b7a887.tar.gz cpython-994c68f586441cee755508e9357e6e03e2b7a887.tar.bz2 |
bpo-40998: Address compiler warnings found by ubsan (GH-20929)
Signed-off-by: Christian Heimes <christian@python.org>
Automerge-Triggered-By: GH:tiran
(cherry picked from commit 07f2adedf0940b06d136208ec386d69b7d2d5b43)
Co-authored-by: Christian Heimes <christian@python.org>
-rw-r--r-- | Misc/NEWS.d/next/Build/2020-06-17-09-05-02.bpo-40998.sgqmg9.rst | 2 | ||||
-rw-r--r-- | Objects/unicodeobject.c | 6 | ||||
-rw-r--r-- | Parser/pegen/parse_string.c | 3 | ||||
-rw-r--r-- | Python/pylifecycle.c | 7 |
4 files changed, 13 insertions, 5 deletions
diff --git a/Misc/NEWS.d/next/Build/2020-06-17-09-05-02.bpo-40998.sgqmg9.rst b/Misc/NEWS.d/next/Build/2020-06-17-09-05-02.bpo-40998.sgqmg9.rst new file mode 100644 index 0000000..c268e4f --- /dev/null +++ b/Misc/NEWS.d/next/Build/2020-06-17-09-05-02.bpo-40998.sgqmg9.rst @@ -0,0 +1,2 @@ +Addressed three compiler warnings found by undefined behavior sanitizer +(ubsan). diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index ea35903..ffd13f7 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -847,7 +847,11 @@ xmlcharrefreplace(_PyBytesWriter *writer, char *str, /* generate replacement */ for (i = collstart; i < collend; ++i) { - str += sprintf(str, "&#%d;", PyUnicode_READ(kind, data, i)); + size = sprintf(str, "&#%d;", PyUnicode_READ(kind, data, i)); + if (size < 0) { + return NULL; + } + str += size; } return str; } diff --git a/Parser/pegen/parse_string.c b/Parser/pegen/parse_string.c index 7b02bdd..fb0c4af 100644 --- a/Parser/pegen/parse_string.c +++ b/Parser/pegen/parse_string.c @@ -74,6 +74,9 @@ decode_unicode_with_escapes(Parser *parser, const char *s, size_t len, Token *t) return NULL; } p = buf = PyBytes_AsString(u); + if (p == NULL) { + return NULL; + } end = s + len; while (s < end) { if (*s == '\\') { diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 5c50d4d..60f091c 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -1353,7 +1353,6 @@ Py_FinalizeEx(void) /* Get current thread state and interpreter pointer */ PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime); - PyInterpreterState *interp = tstate->interp; // Wrap up existing "threading"-module-created, non-daemon threads. wait_for_thread_shutdown(tstate); @@ -1376,13 +1375,13 @@ Py_FinalizeEx(void) /* Copy the core config, PyInterpreterState_Delete() free the core config memory */ #ifdef Py_REF_DEBUG - int show_ref_count = interp->config.show_ref_count; + int show_ref_count = tstate->interp->config.show_ref_count; #endif #ifdef Py_TRACE_REFS - int dump_refs = interp->config.dump_refs; + int dump_refs = tstate->interp->config.dump_refs; #endif #ifdef WITH_PYMALLOC - int malloc_stats = interp->config.malloc_stats; + int malloc_stats = tstate->interp->config.malloc_stats; #endif /* Remaining daemon threads will automatically exit |