Commit 5c709ef1 authored by Sergei Petrunia's avatar Sergei Petrunia

MDEV-26724 Endless loop in json_escape_to_string upon ... empty string

Correctly handle empty string when [un]escaping JSON
parent 61cd4f44
......@@ -7853,3 +7853,19 @@ test.t1 analyze status OK
select * from t1 where a = 'foo';
a
drop table t1;
#
# MDEV-26724 Endless loop in json_escape_to_string upon ... empty string
#
CREATE TABLE t1 (f VARCHAR(8));
INSERT INTO t1 VALUES ('a'),(''),('b');
SET histogram_type=JSON_HB;
ANALYZE TABLE t PERSISTENT FOR ALL;
Table Op Msg_type Msg_text
test.t analyze Error Table 'test.t' doesn't exist
test.t analyze status Operation failed
select * from t1;
f
a
b
drop table t1;
......@@ -193,3 +193,13 @@ analyze table t1 persistent for all;
select * from t1 where a = 'foo';
drop table t1;
--echo #
--echo # MDEV-26724 Endless loop in json_escape_to_string upon ... empty string
--echo #
CREATE TABLE t1 (f VARCHAR(8));
INSERT INTO t1 VALUES ('a'),(''),('b');
SET histogram_type=JSON_HB;
ANALYZE TABLE t PERSISTENT FOR ALL;
select * from t1;
drop table t1;
......@@ -41,7 +41,7 @@ static bool json_unescape_to_string(const char *val, int val_len, String* out)
(const uchar*)val + val_len,
&my_charset_utf8mb4_bin,
buf, buf + out->length());
if (res > 0)
if (res >= 0)
{
out->length(res);
return false; // Ok
......@@ -74,7 +74,7 @@ static bool json_escape_to_string(const char *val, int val_len, String* out)
(const uchar*)val + val_len,
&my_charset_utf8mb4_bin,
buf, buf + out->length());
if (res > 0)
if (res >= 0)
{
out->length(res);
return false; // Ok
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment