summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2017-12-16 07:42:33 (GMT)
committerGitHub <noreply@github.com>2017-12-16 07:42:33 (GMT)
commit0c644fcda095b12eedfb417f15429795c09196b6 (patch)
tree5d1230628200ffa2c524269da9bc6781493a11c1 /Python
parent9454060e84a669dde63824d9e2fcaf295e34f687 (diff)
downloadcpython-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.c8
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;