Skip to content

Commit

Permalink
Correct float parsing when exponent has sign
Browse files Browse the repository at this point in the history
  • Loading branch information
ekaitz-zarraga committed May 21, 2020
1 parent d2006da commit ce1996f
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions lib/chibi/json.c
Expand Up @@ -17,7 +17,7 @@ sexp sexp_json_exception (sexp ctx, sexp self, const char* msg, sexp str, const

sexp parse_json_number (sexp ctx, sexp self, sexp str, const char* s, int* i, const int len) {
double res = 0, scale = 1;
int j = *i, sign = 1, inexactp = 0;
int j = *i, sign = 1, inexactp = 0, scale_sign = 1;
if (s[j] == '+') {
++j;
} else if (s[j] == '-') {
Expand All @@ -33,9 +33,17 @@ sexp parse_json_number (sexp ctx, sexp self, sexp str, const char* s, int* i, co
res /= scale;
} else if (j < len && sexp_tolower(s[j]) == 'e') {
inexactp = 1;
if (j+1 < len) {
if (s[j+1] == '+') {
++j;
} else if (s[j+1] == '-') {
++j;
scale_sign = -1;
}
}
for (++j, scale=0; j < len && isdigit(s[j]); )
scale = scale * 10 + s[j++] - '0';
res *= pow(10.0, scale);
res *= pow(10.0, scale_sign * scale);
}
*i = j;
return (inexactp || fabs(res) > SEXP_MAX_FIXNUM) ?
Expand Down

0 comments on commit ce1996f

Please sign in to comment.