summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2020-11-18 16:01:48 (GMT)
committerGitHub <noreply@github.com>2020-11-18 16:01:48 (GMT)
commit994c68f586441cee755508e9357e6e03e2b7a887 (patch)
tree28312823d8d46acaa8f72a7c1e7dc7f3728f8f41
parent802ff7c0d339376a1b974e57d2caca898310de3d (diff)
downloadcpython-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.rst2
-rw-r--r--Objects/unicodeobject.c6
-rw-r--r--Parser/pegen/parse_string.c3
-rw-r--r--Python/pylifecycle.c7
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