From fa20e80860e9743d1c090aba4583dbd7cc761293 Mon Sep 17 00:00:00 2001 From: Petri Lehtinen Date: Wed, 27 Aug 2014 07:51:08 +0300 Subject: [PATCH] Parse subnormal numbers correctly Fixes #202. --- src/strconv.c | 3 ++- test/suites/valid/real-subnormal-number/input | 1 + test/suites/valid/real-subnormal-number/output | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 test/suites/valid/real-subnormal-number/input create mode 100644 test/suites/valid/real-subnormal-number/output diff --git a/src/strconv.c b/src/strconv.c index f6616dc..c3563b9 100644 --- a/src/strconv.c +++ b/src/strconv.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "jansson_private.h" #include "strbuffer.h" @@ -69,7 +70,7 @@ int jsonp_strtod(strbuffer_t *strbuffer, double *out) value = strtod(strbuffer->value, &end); assert(end == strbuffer->value + strbuffer->length); - if(errno == ERANGE && value != 0) { + if((value == HUGE_VAL || value == -HUGE_VAL) && errno == ERANGE) { /* Overflow */ return -1; } diff --git a/test/suites/valid/real-subnormal-number/input b/test/suites/valid/real-subnormal-number/input new file mode 100644 index 0000000..df60653 --- /dev/null +++ b/test/suites/valid/real-subnormal-number/input @@ -0,0 +1 @@ +[1.8011670033376514e-308] diff --git a/test/suites/valid/real-subnormal-number/output b/test/suites/valid/real-subnormal-number/output new file mode 100644 index 0000000..e6b0a58 --- /dev/null +++ b/test/suites/valid/real-subnormal-number/output @@ -0,0 +1 @@ +[1.8011670033376514e-308] \ No newline at end of file