diff --git a/cJSON.c b/cJSON.c index 27c3385fddd026284a1c42354e011dc36802ede6..027f440fe439e26f6800f9857f37b4efad0ac7d4 100644 --- a/cJSON.c +++ b/cJSON.c @@ -327,25 +327,28 @@ static const char *parse_array(cJSON *item,const char *value) /* Render an array to text */ static char *print_array(cJSON *item,int depth,int fmt) { - char **entries; + char **entries=0; char *out=0,*ptr,*ret;int len=5; cJSON *child=item->child; int numentries=0,i=0,fail=0; /* How many entries in the array? */ while (child) numentries++,child=child->next; - /* Allocate an array to hold the values for each */ - entries=(char**)cJSON_malloc(numentries*sizeof(char*)); - if (!entries) return 0; - memset(entries,0,numentries*sizeof(char*)); - /* Retrieve all the results: */ - child=item->child; - while (child && !fail) + if (numentries) { - ret=print_value(child,depth+1,fmt); - entries[i++]=ret; - if (ret) len+=strlen(ret)+2+(fmt?1:0); else fail=1; - child=child->next; + /* Allocate an array to hold the values for each */ + entries=(char**)cJSON_malloc(numentries*sizeof(char*)); + if (!entries) return 0; + memset(entries,0,numentries*sizeof(char*)); + /* Retrieve all the results: */ + child=item->child; + while (child && !fail) + { + ret=print_value(child,depth+1,fmt); + entries[i++]=ret; + if (ret) len+=strlen(ret)+2+(fmt?1:0); else fail=1; + child=child->next; + } } /* If we didn't fail, try to malloc the output string */ @@ -357,7 +360,7 @@ static char *print_array(cJSON *item,int depth,int fmt) if (fail) { for (i=0;i