json: Print "nan", "-inf", "inf" if needed.
authorWerner Koch <wk@gnupg.org>
Tue, 4 Jun 2019 08:56:48 +0000 (10:56 +0200)
committerWerner Koch <wk@gnupg.org>
Tue, 4 Jun 2019 08:56:48 +0000 (10:56 +0200)
* src/cJSON.c (print_number): Print NaN and INF.
--

GnuPG-bug-id: 4328
Signed-off-by: Werner Koch <wk@gnupg.org>
src/cJSON.c

index c4fd5f7..f233848 100644 (file)
@@ -216,6 +216,8 @@ print_number (cJSON * item)
 {
   char *str;
   double d = item->valuedouble;
+  int i;
+
   if (fabs (((double) item->valueint) - d) <= DBL_EPSILON && d <= INT_MAX
       && d >= INT_MIN)
     {
@@ -229,7 +231,11 @@ print_number (cJSON * item)
       str = xtrymalloc (64);   /* This is a nice tradeoff. */
       if (str)
        {
-         if (fabs (floor (d) - d) <= DBL_EPSILON && fabs (d) < 1.0e60)
+          if (isnan (d))
+            strcpy (str, "nan");
+          else if ((i = isinf (d)))
+            strcpy (str, i > 0? "inf" : ":-inf");
+         else if (fabs (floor (d) - d) <= DBL_EPSILON && fabs (d) < 1.0e60)
            sprintf (str, "%.0f", d);
          else if (fabs (d) < 1.0e-6 || fabs (d) > 1.0e9)
            sprintf (str, "%e", d);