Fix json_loadf and json_loadfd with empty input
[jansson.git] / src / strbuffer.c
index 911748d..6674f49 100644 (file)
@@ -7,17 +7,25 @@
 #define STRBUFFER_MIN_SIZE  16
 #define STRBUFFER_FACTOR    2
 
-void strbuffer_init(strbuffer_t *strbuff)
+int strbuffer_init(strbuffer_t *strbuff)
 {
-    strbuff->value = NULL;
+    strbuff->size = STRBUFFER_MIN_SIZE;
     strbuff->length = 0;
-    strbuff->size = 0;
+
+    strbuff->value = malloc(strbuff->size);
+    if(!strbuff->value)
+        return -1;
+
+    memset(strbuff->value, 0, strbuff->size);
+    return 0;
 }
 
 void strbuffer_close(strbuffer_t *strbuff)
 {
     free(strbuff->value);
-    strbuffer_init(strbuff);
+    strbuff->size = 0;
+    strbuff->length = 0;
+    strbuff->value = NULL;
 }
 
 const char *strbuffer_value(strbuffer_t *strbuff)
@@ -39,13 +47,10 @@ int strbuffer_append(strbuffer_t *strbuff, const char *string)
 
 int strbuffer_append_bytes(strbuffer_t *strbuff, const char *data, int size)
 {
-    if(strbuff->length + size > strbuff->size)
+    if(strbuff->length + size >= strbuff->size)
     {
-        if(strbuff->length == 0)
-            strbuff->size = max(size + 1, STRBUFFER_MIN_SIZE);
-        else
-            strbuff->size = max(strbuff->size * STRBUFFER_FACTOR,
-                                strbuff->length + size + 1);
+        strbuff->size = max(strbuff->size * STRBUFFER_FACTOR,
+                            strbuff->length + size + 1);
 
         strbuff->value = realloc(strbuff->value, strbuff->size);
         if(!strbuff->value)