From e58f7ec027d00b7cdcbf63e518c1b5268b29b3da Mon Sep 17 00:00:00 2001 From: Max Bruckner Date: Thu, 23 Mar 2017 20:26:29 +0100 Subject: [PATCH] ensure: Fix potential overflow of size_t This could only happen if the maximum SIZE_T is not at least 2 times bigger than INT_MAX. Not sure if this can happen on real systems, but better be safe then sorry. --- cJSON.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cJSON.c b/cJSON.c index c090df3..283faa0 100644 --- a/cJSON.c +++ b/cJSON.c @@ -270,8 +270,7 @@ static unsigned char* ensure(printbuffer * const p, size_t needed, const interna } /* calculate new buffer size */ - newsize = needed * 2; - if (newsize > INT_MAX) + if (newsize > (INT_MAX / 2)) { /* overflow of int, use INT_MAX if possible */ if (needed <= INT_MAX) @@ -283,6 +282,10 @@ static unsigned char* ensure(printbuffer * const p, size_t needed, const interna return NULL; } } + else + { + newsize = needed * 2; + } if (hooks->reallocate != NULL) {