Преглед изворни кода

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.
Max Bruckner пре 8 година
родитељ
комит
e58f7ec027
1 измењених фајлова са 5 додато и 2 уклоњено
  1. 5 2
      cJSON.c

+ 5 - 2
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)
     {