]> git.feebdaed.xyz Git - 0xmirror/cJSON.git/commitdiff
Fix null pointer crash, closes #536 (#538)
authorAlan Wang <wp_scut@163.com>
Thu, 17 Dec 2020 07:42:31 +0000 (15:42 +0800)
committerGitHub <noreply@github.com>
Thu, 17 Dec 2020 07:42:31 +0000 (15:42 +0800)
cJSON.c

diff --git a/cJSON.c b/cJSON.c
index c06279d4a4b2d61109cd162e4f974486c6f8c1b5..0f079ae15f7b37befc525b2bfdcedbad1c65844b 100644 (file)
--- a/cJSON.c
+++ b/cJSON.c
@@ -2548,12 +2548,8 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count)
     }
 
     a = cJSON_CreateArray();
-    if (!a)
-    {
-        return NULL;
-    }
 
-    for(i = 0; i < (size_t)count; i++)
+    for(i = 0; a && (i < (size_t)count); i++)
     {
         n = cJSON_CreateNumber(numbers[i]);
         if (!n)
@@ -2571,7 +2567,10 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count)
         }
         p = n;
     }
-    a->child->prev = n;
+
+    if (a && a->child) {
+        a->child->prev = n;
+    }
 
     return a;
 }
@@ -2589,12 +2588,8 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count)
     }
 
     a = cJSON_CreateArray();
-    if (!a)
-    {
-        return NULL;
-    }
 
-    for(i = 0; i < (size_t)count; i++)
+    for(i = 0; a && (i < (size_t)count); i++)
     {
         n = cJSON_CreateNumber((double)numbers[i]);
         if(!n)
@@ -2612,7 +2607,10 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count)
         }
         p = n;
     }
-    a->child->prev = n;
+
+    if (a && a->child) {
+        a->child->prev = n;
+    }
 
     return a;
 }
@@ -2630,12 +2628,8 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count)
     }
 
     a = cJSON_CreateArray();
-    if (!a)
-    {
-        return NULL;
-    }
 
-    for(i = 0; i < (size_t)count; i++)
+    for(i = 0; a && (i < (size_t)count); i++)
     {
         n = cJSON_CreateNumber(numbers[i]);
         if(!n)
@@ -2653,7 +2647,10 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count)
         }
         p = n;
     }
-    a->child->prev = n;
+
+    if (a && a->child) {
+        a->child->prev = n;
+    }
 
     return a;
 }
@@ -2671,12 +2668,8 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char *const *strings, int co
     }
 
     a = cJSON_CreateArray();
-    if (!a)
-    {
-        return NULL;
-    }
 
-    for (i = 0; i < (size_t)count; i++)
+    for (i = 0; a && (i < (size_t)count); i++)
     {
         n = cJSON_CreateString(strings[i]);
         if(!n)
@@ -2694,8 +2687,11 @@ CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char *const *strings, int co
         }
         p = n;
     }
-    a->child->prev = n;
 
+    if (a && a->child) {
+        a->child->prev = n;
+    }
+    
     return a;
 }