Skip to content

Commit

Permalink
MDEV-19670 json escaped unicode parse error.
Browse files Browse the repository at this point in the history
Fixed 4-byte length characters handled incorrectly.
  • Loading branch information
Alexey Botchkov committed Sep 12, 2019
1 parent 0fa5ad3 commit 9554ef0
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 1 deletion.
9 changes: 9 additions & 0 deletions mysql-test/main/func_json.result
Original file line number Diff line number Diff line change
Expand Up @@ -942,5 +942,14 @@ def json_depnth 3 10 1 N 32897 0 63
json_length json_depnth
2 3
#
# MDEV-19670 json escaped unicode parse error
#
SELECT json_valid('{"value":"\\ud83d\\ude0a"}');
json_valid('{"value":"\\ud83d\\ude0a"}')
1
SELECT json_valid('{"test": "\\ud83d\\ude0b"}');
json_valid('{"test": "\\ud83d\\ude0b"}')
1
#
# End of 10.3 tests
#
7 changes: 7 additions & 0 deletions mysql-test/main/func_json.test
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,13 @@ SELECT
--enable_ps_protocol
--disable_metadata

--echo #
--echo # MDEV-19670 json escaped unicode parse error
--echo #

SELECT json_valid('{"value":"\\ud83d\\ude0a"}');
SELECT json_valid('{"test": "\\ud83d\\ude0b"}');

--echo #
--echo # End of 10.3 tests
--echo #
4 changes: 3 additions & 1 deletion strings/json_lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -320,15 +320,17 @@ static int json_handle_esc(json_string_t *s)
if (s->c_next != '\\')
return s->error= JE_SYN;

s->c_str+= c_len;
if ((c_len= json_next_char(s)) <= 0)
return s->error= json_eos(s) ? JE_EOS : JE_BAD_CHR;
if (s->c_next != 'u')
return s->error= JE_SYN;
s->c_str+= c_len;

if (read_4_hexdigits(s, code+2))
return 1;

if ((c_len= my_utf16_uni(0, &s->c_next, code, code+4)) == 2)
if ((c_len= my_utf16_uni(0, &s->c_next, code, code+4)) == 4)
return 0;
}
return s->error= JE_BAD_CHR;
Expand Down

0 comments on commit 9554ef0

Please sign in to comment.