diff options
author | Rucha Deodhar <rucha.deodhar@mariadb.com> | 2022-12-29 17:34:53 +0530 |
---|---|---|
committer | Rucha Deodhar <rucha.deodhar@mariadb.com> | 2022-12-29 17:34:53 +0530 |
commit | 1be914eebd3643ef7f428cf27434675e757ec35f (patch) | |
tree | b21cc5223d546b07406a62ede1e9f247d69695d3 | |
parent | 5bb2cc8dbcfba3aa1e19a0b0d7ffcf27eed3290e (diff) | |
download | mariadb-git-bb-10.9-MDEV-29381.tar.gz |
MDEV-29381: JSON paths containing dashes are reported as syntax errors inbb-10.9-MDEV-29381
procedures
Analysis:
While scanning json path, when '-' is encountered while scanning a key,
the the json_path_transition reports incorrect state that denotes
syntax error. Hence it incorrectly reports error.
Fix:
Change JE_SYN to PS_KNMX to keep scanning the key.
-rw-r--r-- | mysql-test/main/func_json.result | 14 | ||||
-rw-r--r-- | mysql-test/main/func_json.test | 20 | ||||
-rw-r--r-- | strings/json_lib.c | 2 |
3 files changed, 35 insertions, 1 deletions
diff --git a/mysql-test/main/func_json.result b/mysql-test/main/func_json.result index 02f044be479..043b2ea375b 100644 --- a/mysql-test/main/func_json.result +++ b/mysql-test/main/func_json.result @@ -2348,5 +2348,19 @@ SELECT JSON_OVERLAPS(@json1, @json2); JSON_OVERLAPS(@json1, @json2) 0 # +# MDEV-29381: JSON paths containing dashes are reported as +# syntax errors in procedures +# +DROP PROCEDURE IF EXISTS my_proc; +Warnings: +Note 1305 PROCEDURE test.my_proc does not exist +CREATE PROCEDURE my_proc() +BEGIN +DECLARE result TEXT; +SET result = JSON_EXTRACT('{ "my-key": 1 }', '$."my-key"'); +END $$ +CALL my_proc(); +DROP PROCEDURE IF EXISTS my_proc; +# # End of 10.9 Test # diff --git a/mysql-test/main/func_json.test b/mysql-test/main/func_json.test index 8123ab4be8a..88d9eb4e775 100644 --- a/mysql-test/main/func_json.test +++ b/mysql-test/main/func_json.test @@ -1605,6 +1605,26 @@ SET @json2 = '{"kk":{"k1":"v1","k2":"v2","k3":"v3"}}'; SELECT JSON_OVERLAPS(@json2, @json1); SELECT JSON_OVERLAPS(@json1, @json2); + +--echo # +--echo # MDEV-29381: JSON paths containing dashes are reported as +--echo # syntax errors in procedures +--echo # + +DROP PROCEDURE IF EXISTS my_proc; + +DELIMITER $$; +CREATE PROCEDURE my_proc() +BEGIN +DECLARE result TEXT; +SET result = JSON_EXTRACT('{ "my-key": 1 }', '$."my-key"'); +END $$ +DELIMITER ;$$ + +CALL my_proc(); + +DROP PROCEDURE IF EXISTS my_proc; + --echo # --echo # End of 10.9 Test --echo # diff --git a/strings/json_lib.c b/strings/json_lib.c index 380959cf204..8febbe75e4c 100644 --- a/strings/json_lib.c +++ b/strings/json_lib.c @@ -1111,7 +1111,7 @@ static int json_path_transitions[N_PATH_STATES][N_PATH_CLASSES]= /* KEYX*/ { JE_EOS, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, JE_SYN, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_ESCX, PS_EKYX, PS_KNMX, JE_NOT_JSON_CHR, JE_BAD_CHR}, -/* KNMX */{ JE_EOS, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, JE_SYN, +/* KNMX */{ JE_EOS, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_KNMX, PS_ESCX, PS_EKYX, PS_KNMX, JE_NOT_JSON_CHR, JE_BAD_CHR}, /* LAST */{ JE_SYN, JE_SYN, JE_SYN, JE_SYN, JE_SYN, PS_PT, JE_SYN, PS_NEG, |