Browse Source

fix: print_number didn't abort when out of memory

Max Bruckner 8 years ago
parent
commit
cf1842dc6f
1 changed files with 23 additions and 21 deletions
  1. 23 21
      cJSON.c

+ 23 - 21
cJSON.c

@@ -372,28 +372,30 @@ static cJSON_bool print_number(const cJSON * const item, printbuffer * const out
 
 
     /* This is a nice tradeoff. */
     /* This is a nice tradeoff. */
     output_pointer = ensure(output_buffer, 64, hooks);
     output_pointer = ensure(output_buffer, 64, hooks);
-    if (output_pointer != NULL)
+    if (output_pointer == NULL)
     {
     {
-        /* This checks for NaN and Infinity */
-        if ((d * 0) != 0)
-        {
-            length = sprintf((char*)output_pointer, "null");
-        }
-        else if ((fabs(floor(d) - d) <= DBL_EPSILON) && (fabs(d) < 1.0e60))
-        {
-            /* integer */
-            length = sprintf((char*)output_pointer, "%.0f", d);
-            trim_zeroes = false; /* don't remove zeroes for "big integers" */
-        }
-        else if ((fabs(d) < 1.0e-6) || (fabs(d) > 1.0e9))
-        {
-            length = sprintf((char*)output_pointer, "%e", d);
-            trim_zeroes = false; /* don't remove zeroes in engineering notation */
-        }
-        else
-        {
-            length = sprintf((char*)output_pointer, "%f", d);
-        }
+        return false;
+    }
+
+    /* This checks for NaN and Infinity */
+    if ((d * 0) != 0)
+    {
+        length = sprintf((char*)output_pointer, "null");
+    }
+    else if ((fabs(floor(d) - d) <= DBL_EPSILON) && (fabs(d) < 1.0e60))
+    {
+        /* integer */
+        length = sprintf((char*)output_pointer, "%.0f", d);
+        trim_zeroes = false; /* don't remove zeroes for "big integers" */
+    }
+    else if ((fabs(d) < 1.0e-6) || (fabs(d) > 1.0e9))
+    {
+        length = sprintf((char*)output_pointer, "%e", d);
+        trim_zeroes = false; /* don't remove zeroes in engineering notation */
+    }
+    else
+    {
+        length = sprintf((char*)output_pointer, "%f", d);
     }
     }
 
 
     /* sprintf failed */
     /* sprintf failed */