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