Skip to content
/ server Public
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions mysql-test/main/func_json.result
Original file line number Diff line number Diff line change
Expand Up @@ -2770,4 +2770,28 @@ S1A1
SELECT JSON_VALUE('{"a":[1,2]}', '$.a[*]');
JSON_VALUE('{"a":[1,2]}', '$.a[*]')
NULL
#
# MDEV-38264 Assertion in json_find_path() fails after computing
# array size of invalid json structure
#
SELECT JSON_QUERY('{ "A": [0,] }', '$.A[-1]');
JSON_QUERY('{ "A": [0,] }', '$.A[-1]')
NULL
SELECT JSON_VALUE('{ "A": [0,] }', '$.A[-1]');
JSON_VALUE('{ "A": [0,] }', '$.A[-1]')
NULL
SELECT JSON_VALUE('{ "A": [5,] }', '$.A[-2]');
JSON_VALUE('{ "A": [5,] }', '$.A[-2]')
NULL
SELECT JSON_VALUE('{ "A": [5] }', '$.A[-2]');
JSON_VALUE('{ "A": [5] }', '$.A[-2]')
NULL
SELECT JSON_LENGTH('{ "A": [0,] }', '$.A');
JSON_LENGTH('{ "A": [0,] }', '$.A')
NULL
Warnings:
Warning 4038 Syntax error in JSON text in argument 1 to function 'json_length' at position 11
SELECT JSON_VALID('{ "A": [0,] }');
JSON_VALID('{ "A": [0,] }')
0
# End of 10.11 Test
12 changes: 12 additions & 0 deletions mysql-test/main/func_json.test
Original file line number Diff line number Diff line change
Expand Up @@ -2032,4 +2032,16 @@ COLUMNS(NAME VARCHAR(30) PATH '$.NAME')) AS t_sz;

SELECT JSON_VALUE('{"a":[1,2]}', '$.a[*]');

--echo #
--echo # MDEV-38264 Assertion in json_find_path() fails after computing
--echo # array size of invalid json structure
--echo #

SELECT JSON_QUERY('{ "A": [0,] }', '$.A[-1]');
SELECT JSON_VALUE('{ "A": [0,] }', '$.A[-1]');
SELECT JSON_VALUE('{ "A": [5,] }', '$.A[-2]');
SELECT JSON_VALUE('{ "A": [5] }', '$.A[-2]');
SELECT JSON_LENGTH('{ "A": [0,] }', '$.A');
SELECT JSON_VALID('{ "A": [0,] }');

--echo # End of 10.11 Test
6 changes: 5 additions & 1 deletion strings/json_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -1306,9 +1306,13 @@ int json_skip_level_and_count(json_engine_t *j, int *n_items_skipped)
int json_skip_array_and_count(json_engine_t *je, int *n_items)
{
json_engine_t j= *je;
int res;
*n_items= 0;

return json_skip_level_and_count(&j, n_items);
res= json_skip_level_and_count(&j, n_items);
if (res)
je->s.error= j.s.error;
return res;
}


Expand Down