From: Mark Dickinson Date: Thu, 10 Dec 2009 10:36:32 +0000 (+0000) Subject: Replace the size check for PyMem_MALLOC and PyMem_REALLOC with an almost X-Git-Tag: v2.7a2~192 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fd25634715d10d5693bcd6215f548fdd43058d41;p=python Replace the size check for PyMem_MALLOC and PyMem_REALLOC with an almost equivalent[*] check that doesn't produce compiler warnings about a 'x < 0' check on an unsigned type. [*] it's equivalent for inputs of type size_t or Py_ssize_t, or any smaller unsigned or signed integer type. --- diff --git a/Include/pymem.h b/Include/pymem.h index e2dfe0d3fc..966c0f5a09 100644 --- a/Include/pymem.h +++ b/Include/pymem.h @@ -71,9 +71,9 @@ PyAPI_FUNC(void) PyMem_Free(void *); pymalloc. To solve these problems, allocate an extra byte. */ /* Returns NULL to indicate error if a negative size or size larger than Py_ssize_t can represent is supplied. Helps prevents security holes. */ -#define PyMem_MALLOC(n) (((n) < 0 || (n) > PY_SSIZE_T_MAX) ? NULL \ +#define PyMem_MALLOC(n) ((size_t)(n) > (size_t)PY_SSIZE_T_MAX ? NULL \ : malloc((n) ? (n) : 1)) -#define PyMem_REALLOC(p, n) (((n) < 0 || (n) > PY_SSIZE_T_MAX) ? NULL \ +#define PyMem_REALLOC(p, n) ((size_t)(n) > (size_t)PY_SSIZE_T_MAX ? NULL \ : realloc((p), (n) ? (n) : 1)) #define PyMem_FREE free