summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Botchkov <holyfoot@askmonty.org>2018-07-31 16:33:05 +0400
committerAlexey Botchkov <holyfoot@askmonty.org>2018-07-31 16:33:05 +0400
commitf4eac2deeb046a68e4a26ed1a08f8df51bbf817b (patch)
tree4065a6061450bc3c22c96c556bc87fb91aa99809
parentfd378fc613851a12be346329d32e1666f10610d7 (diff)
downloadmariadb-git-f4eac2deeb046a68e4a26ed1a08f8df51bbf817b.tar.gz
MDEV-16054 simple json functions flatline cpu on garbage input.
Incorrect char sentence should be handled properly.
-rw-r--r--mysql-test/r/func_json.result6
-rw-r--r--mysql-test/t/func_json.test7
-rw-r--r--strings/json_lib.c2
3 files changed, 15 insertions, 0 deletions
diff --git a/mysql-test/r/func_json.result b/mysql-test/r/func_json.result
index 39bd46b7dea..206f745a0d2 100644
--- a/mysql-test/r/func_json.result
+++ b/mysql-test/r/func_json.result
@@ -760,3 +760,9 @@ t1 CREATE TABLE `t1` (
`c2` varchar(38) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1;
+#
+# MDEV-16054 simple json functions flatline cpu on garbage input.
+#
+select json_array(1,uuid(),compress(5.140264e+307));
+json_array(1,uuid(),compress(5.140264e+307))
+NULL
diff --git a/mysql-test/t/func_json.test b/mysql-test/t/func_json.test
index 37b18763e91..c2cc00dd6e2 100644
--- a/mysql-test/t/func_json.test
+++ b/mysql-test/t/func_json.test
@@ -422,3 +422,10 @@ CREATE TABLE t1 AS SELECT
JSON_QUOTE(_utf8'foo') AS c2;
SHOW CREATE TABLE t1;
DROP TABLE t1;
+
+--echo #
+--echo # MDEV-16054 simple json functions flatline cpu on garbage input.
+--echo #
+
+select json_array(1,uuid(),compress(5.140264e+307));
+
diff --git a/strings/json_lib.c b/strings/json_lib.c
index cbf672f5887..f6b4f15732d 100644
--- a/strings/json_lib.c
+++ b/strings/json_lib.c
@@ -1645,6 +1645,8 @@ int json_escape(CHARSET_INFO *str_cs,
return -1;
}
}
+ else /* c_len == 0, an illegal symbol. */
+ return -1;
}
return (int)(json - json_start);