Commit f1f6737e authored by Peter Eisentraut's avatar Peter Eisentraut

Fix incorrect logic in JSON number lexer

Detectable by gcc -Wlogical-op.

Add two regression test cases that would previously allow incorrect
values to pass.
parent fe2534e5
...@@ -541,7 +541,7 @@ json_lex_number(JsonLexContext *lex, char *s) ...@@ -541,7 +541,7 @@ json_lex_number(JsonLexContext *lex, char *s)
if (*s == '.') if (*s == '.')
{ {
++s; ++s;
if (*s < '0' && *s > '9') if (*s < '0' || *s > '9')
error = true; error = true;
else else
{ {
...@@ -558,7 +558,7 @@ json_lex_number(JsonLexContext *lex, char *s) ...@@ -558,7 +558,7 @@ json_lex_number(JsonLexContext *lex, char *s)
++s; ++s;
if (*s == '+' || *s == '-') if (*s == '+' || *s == '-')
++s; ++s;
if (*s < '0' && *s > '9') if (*s < '0' || *s > '9')
error = true; error = true;
else else
{ {
......
...@@ -113,6 +113,16 @@ ERROR: invalid input syntax for type json ...@@ -113,6 +113,16 @@ ERROR: invalid input syntax for type json
LINE 1: SELECT '1f2'::json; LINE 1: SELECT '1f2'::json;
^ ^
DETAIL: line 1: Token "1f2" is invalid. DETAIL: line 1: Token "1f2" is invalid.
SELECT '0.x1'::json; -- ERROR
ERROR: invalid input syntax for type json
LINE 1: SELECT '0.x1'::json;
^
DETAIL: line 1: Token "0.x1" is invalid.
SELECT '1.3ex100'::json; -- ERROR
ERROR: invalid input syntax for type json
LINE 1: SELECT '1.3ex100'::json;
^
DETAIL: line 1: Token "1.3ex100" is invalid.
-- Arrays. -- Arrays.
SELECT '[]'::json; -- OK SELECT '[]'::json; -- OK
json json
......
...@@ -22,6 +22,8 @@ SELECT '9223372036854775808'::json; -- OK, even though it's too large for int8 ...@@ -22,6 +22,8 @@ SELECT '9223372036854775808'::json; -- OK, even though it's too large for int8
SELECT '1e100'::json; -- OK SELECT '1e100'::json; -- OK
SELECT '1.3e100'::json; -- OK SELECT '1.3e100'::json; -- OK
SELECT '1f2'::json; -- ERROR SELECT '1f2'::json; -- ERROR
SELECT '0.x1'::json; -- ERROR
SELECT '1.3ex100'::json; -- ERROR
-- Arrays. -- Arrays.
SELECT '[]'::json; -- OK SELECT '[]'::json; -- OK
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment