summaryrefslogtreecommitdiff
path: root/src/cJSON.c
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2019-06-04 10:56:48 +0200
committerWerner Koch <wk@gnupg.org>2019-06-04 10:56:48 +0200
commitf56c996318dfa1c9f0d10582b18c2fce10d24668 (patch)
treeb511c7fc9519e05e63bb59c56396c42c32cbc97a /src/cJSON.c
parentfabe96126b4ed9c5e07b713813d7db26a02e5e5f (diff)
downloadgpgme-f56c996318dfa1c9f0d10582b18c2fce10d24668.tar.gz
json: Print "nan", "-inf", "inf" if needed.
* src/cJSON.c (print_number): Print NaN and INF. -- GnuPG-bug-id: 4328 Signed-off-by: Werner Koch <wk@gnupg.org>
Diffstat (limited to 'src/cJSON.c')
-rw-r--r--src/cJSON.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/cJSON.c b/src/cJSON.c
index c4fd5f7e..f233848e 100644
--- a/src/cJSON.c
+++ b/src/cJSON.c
@@ -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);