From 65541b900c740e1d527cd4f1935eec3740d4d95a Mon Sep 17 00:00:00 2001 From: Max Bruckner Date: Sat, 8 Apr 2017 03:42:44 +0200 Subject: [PATCH] Update space requirements of cJSON_PrintPreallocated --- cJSON.h | 2 +- test.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cJSON.h b/cJSON.h index d3f492c..c2ef2fa 100644 --- a/cJSON.h +++ b/cJSON.h @@ -133,7 +133,7 @@ CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item); /* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */ CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt); /* Render a cJSON entity to text using a buffer already allocated in memory with given length. Returns 1 on success and 0 on failure. */ -/* NOTE: If you are printing numbers, the buffer hat to be 63 bytes bigger then the printed JSON (worst case) */ +/* NOTE: cJSON is not always 100% accurate in estimating how much memory it will use, so to be safe allocate 5 bytes more than you actually need */ CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format); /* Delete a cJSON entity and all subentities. */ CJSON_PUBLIC(void) cJSON_Delete(cJSON *c); diff --git a/test.c b/test.c index 34be4d7..e902c71 100644 --- a/test.c +++ b/test.c @@ -53,8 +53,8 @@ static int print_preallocated(cJSON *root) out = cJSON_Print(root); /* create buffer to succeed */ - /* the extra 64 bytes are in case a floating point value is printed */ - len = strlen(out) + 64; + /* the extra 5 bytes are because of inaccuracies when reserving memory */ + len = strlen(out) + 5; buf = (char*)malloc(len); if (buf == NULL) {