mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
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.
This commit is contained in:
parent
fe2534e534
commit
f1f6737e15
@ -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)
|
|||||||
++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
|
|||||||
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
|
|||||||
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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user