diff options
author | Benjamin Peterson <benjamin@python.org> | 2017-12-16 07:42:33 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-16 07:42:33 (GMT) |
commit | 0c644fcda095b12eedfb417f15429795c09196b6 (patch) | |
tree | 5d1230628200ffa2c524269da9bc6781493a11c1 /Python | |
parent | 9454060e84a669dde63824d9e2fcaf295e34f687 (diff) | |
download | cpython-0c644fcda095b12eedfb417f15429795c09196b6.zip cpython-0c644fcda095b12eedfb417f15429795c09196b6.tar.gz cpython-0c644fcda095b12eedfb417f15429795c09196b6.tar.bz2 |
fix up signedness in PyImport_ExtendInittab (#4831)
As a result of 92a3c6f493ad411e4cf0acdf305ef4876aa90669, the compiler complains:
Python/import.c:2311:21: warning: comparison of integers of different signs: 'long' and 'unsigned long' [-Wsign-compare]
if ((i + n + 1) <= PY_SSIZE_T_MAX / sizeof(struct _inittab)) {
~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This overflow is extremely unlikely to happen, but let's avoid undefined
behavior anyway.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/import.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/Python/import.c b/Python/import.c index d5dad1a..8d30640 100644 --- a/Python/import.c +++ b/Python/import.c @@ -2291,7 +2291,7 @@ int PyImport_ExtendInittab(struct _inittab *newtab) { struct _inittab *p; - Py_ssize_t i, n; + size_t i, n; int res = 0; /* Count the number of entries in both tables */ @@ -2308,13 +2308,11 @@ PyImport_ExtendInittab(struct _inittab *newtab) _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc); /* Allocate new memory for the combined table */ - if ((i + n + 1) <= PY_SSIZE_T_MAX / (Py_ssize_t)sizeof(struct _inittab)) { + p = NULL; + if (i + n <= SIZE_MAX / sizeof(struct _inittab) - 1) { size_t size = sizeof(struct _inittab) * (i + n + 1); p = PyMem_RawRealloc(inittab_copy, size); } - else { - p = NULL; - } if (p == NULL) { res = -1; goto done; |