mirror of https://github.com/akheron/jansson
parent
96f8916e50
commit
a425f8c650
14
src/load.c
14
src/load.c
|
@ -483,7 +483,7 @@ static int lex_scan_number(lex_t *lex, int c, json_error_t *error)
|
||||||
{
|
{
|
||||||
const char *saved_text;
|
const char *saved_text;
|
||||||
char *end;
|
char *end;
|
||||||
double value;
|
double doubleval;
|
||||||
|
|
||||||
lex->token = TOKEN_INVALID;
|
lex->token = TOKEN_INVALID;
|
||||||
|
|
||||||
|
@ -508,16 +508,16 @@ static int lex_scan_number(lex_t *lex, int c, json_error_t *error)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(c != '.' && c != 'E' && c != 'e') {
|
if(c != '.' && c != 'E' && c != 'e') {
|
||||||
json_int_t value;
|
json_int_t intval;
|
||||||
|
|
||||||
lex_unget_unsave(lex, c);
|
lex_unget_unsave(lex, c);
|
||||||
|
|
||||||
saved_text = strbuffer_value(&lex->saved_text);
|
saved_text = strbuffer_value(&lex->saved_text);
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
value = json_strtoint(saved_text, &end, 10);
|
intval = json_strtoint(saved_text, &end, 10);
|
||||||
if(errno == ERANGE) {
|
if(errno == ERANGE) {
|
||||||
if(value < 0)
|
if(intval < 0)
|
||||||
error_set(error, lex, "too big negative integer");
|
error_set(error, lex, "too big negative integer");
|
||||||
else
|
else
|
||||||
error_set(error, lex, "too big integer");
|
error_set(error, lex, "too big integer");
|
||||||
|
@ -527,7 +527,7 @@ static int lex_scan_number(lex_t *lex, int c, json_error_t *error)
|
||||||
assert(end == saved_text + lex->saved_text.length);
|
assert(end == saved_text + lex->saved_text.length);
|
||||||
|
|
||||||
lex->token = TOKEN_INTEGER;
|
lex->token = TOKEN_INTEGER;
|
||||||
lex->value.integer = value;
|
lex->value.integer = intval;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -561,13 +561,13 @@ static int lex_scan_number(lex_t *lex, int c, json_error_t *error)
|
||||||
|
|
||||||
lex_unget_unsave(lex, c);
|
lex_unget_unsave(lex, c);
|
||||||
|
|
||||||
if(jsonp_strtod(&lex->saved_text, &value)) {
|
if(jsonp_strtod(&lex->saved_text, &doubleval)) {
|
||||||
error_set(error, lex, "real number overflow");
|
error_set(error, lex, "real number overflow");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
lex->token = TOKEN_REAL;
|
lex->token = TOKEN_REAL;
|
||||||
lex->value.real = value;
|
lex->value.real = doubleval;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
Loading…
Reference in New Issue