diff --git a/mysql-test/r/func_json.result b/mysql-test/r/func_json.result index f89c5f1c71b..d11c0273024 100644 --- a/mysql-test/r/func_json.result +++ b/mysql-test/r/func_json.result @@ -674,3 +674,9 @@ JSON_EXTRACT('{"foo": "bar" foobar foo invalid ', '$.foo') NULL Warnings: Warning 4038 Syntax error in JSON text in argument 1 to function 'json_extract' at position 15 +SELECT JSON_OBJECT('foo', '`'); +JSON_OBJECT('foo', '`') +{"foo": "`"} +SELECT JSON_OBJECT("foo", "bar`bar"); +JSON_OBJECT("foo", "bar`bar") +{"foo": "bar`bar"} diff --git a/mysql-test/t/func_json.test b/mysql-test/t/func_json.test index eba492b72e8..3b978c1a1cf 100644 --- a/mysql-test/t/func_json.test +++ b/mysql-test/t/func_json.test @@ -322,3 +322,9 @@ select JSON_EXTRACT('{\"input1\":\"\\u00f6\"}', '$.\"input1\"'); # select JSON_EXTRACT('{"foo": "bar" foobar foo invalid ', '$.foo'); +# +# MDEV-13138 JSON_OBJECT returns null with strings containing backticks. +# +SELECT JSON_OBJECT('foo', '`'); +SELECT JSON_OBJECT("foo", "bar`bar"); + diff --git a/strings/json_lib.c b/strings/json_lib.c index b0c843caec1..25e5e81e6f9 100644 --- a/strings/json_lib.c +++ b/strings/json_lib.c @@ -1586,7 +1586,7 @@ int json_escape(CHARSET_INFO *str_cs, enum json_esc_char_classes c_class; str+= c_len; - if (c_chr > 0x60 || (c_class= json_escape_chr_map[c_chr]) == ESC_) + if (c_chr >= 0x60 || (c_class= json_escape_chr_map[c_chr]) == ESC_) { if ((c_len= json_cs->cset->wc_mb(json_cs, c_chr, json, json_end)) > 0) {