mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-26724 Endless loop in json_escape_to_string upon ... empty string
Correctly handle empty string when [un]escaping JSON
This commit is contained in:
@ -7853,3 +7853,19 @@ test.t1 analyze status OK
|
|||||||
select * from t1 where a = 'foo';
|
select * from t1 where a = 'foo';
|
||||||
a
|
a
|
||||||
drop table t1;
|
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';
|
select * from t1 where a = 'foo';
|
||||||
drop table t1;
|
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,
|
(const uchar*)val + val_len,
|
||||||
&my_charset_utf8mb4_bin,
|
&my_charset_utf8mb4_bin,
|
||||||
buf, buf + out->length());
|
buf, buf + out->length());
|
||||||
if (res > 0)
|
if (res >= 0)
|
||||||
{
|
{
|
||||||
out->length(res);
|
out->length(res);
|
||||||
return false; // Ok
|
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,
|
(const uchar*)val + val_len,
|
||||||
&my_charset_utf8mb4_bin,
|
&my_charset_utf8mb4_bin,
|
||||||
buf, buf + out->length());
|
buf, buf + out->length());
|
||||||
if (res > 0)
|
if (res >= 0)
|
||||||
{
|
{
|
||||||
out->length(res);
|
out->length(res);
|
||||||
return false; // Ok
|
return false; // Ok
|
||||||
|
Reference in New Issue
Block a user