summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNayuta Yanagisawa <nayuta.yanagisawa@hey.com>2021-12-23 21:07:28 +0900
committerNayuta Yanagisawa <nayuta.yanagisawa@hey.com>2021-12-27 11:49:12 +0900
commit5045509b724cbfe0311366fd2bbc36c7753e0852 (patch)
treef2e77b684f33525227bceb0740cfcc531b3dafb1
parent681b7784b6bb3d735d0a745f5891844f43becc90 (diff)
downloadmariadb-git-5045509b724cbfe0311366fd2bbc36c7753e0852.tar.gz
MDEV-27184 Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed, Assertion `str.alloced_length() >= str.length() + data_len' failed
Spider crashes on a query that inserts some rows including float. This is because Spider allocates a string of insufficient length.
-rw-r--r--storage/spider/mysql-test/spider/bugfix/r/mdev_27184.result21
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/mdev_27184.cnf2
-rw-r--r--storage/spider/mysql-test/spider/bugfix/t/mdev_27184.test31
-rw-r--r--storage/spider/spd_db_mysql.cc2
4 files changed, 55 insertions, 1 deletions
diff --git a/storage/spider/mysql-test/spider/bugfix/r/mdev_27184.result b/storage/spider/mysql-test/spider/bugfix/r/mdev_27184.result
new file mode 100644
index 00000000000..8a3d9da1dc4
--- /dev/null
+++ b/storage/spider/mysql-test/spider/bugfix/r/mdev_27184.result
@@ -0,0 +1,21 @@
+#
+# MDEV-27184 Assertion `(old_top == initial_top (av) && old_size == 0) ||
+# ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) &&
+# ((unsigned long) old_end & (pagesize - 1)) == 0)' failed,
+# Assertion `str.alloced_length() >= str.length() + data_len' failed
+#
+for master_1
+for child2
+for child3
+connection master_1;
+CREATE DATABASE auto_test_remote;
+USE auto_test_remote;
+CREATE TABLE tbl_a (a FLOAT) ENGINE=SPIDER;
+INSERT INTO tbl_a VALUES
+(0xF5A7),(0xF5A8),(0xF5A9),(0xF5AA),(0xF5AB),(0xF5AC),(0xF5AD),(0xF5AE),
+(0xF5A7),(0xF5A8),(0xF5A9),(0xF5AA),(0xF5AB),(0xF5AC),(0xF5AD),(0xF5AE);
+ERROR HY000: Unable to connect to foreign data source: localhost
+DROP DATABASE auto_test_remote;
+for master_1
+for child2
+for child3
diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_27184.cnf b/storage/spider/mysql-test/spider/bugfix/t/mdev_27184.cnf
new file mode 100644
index 00000000000..b0853e32654
--- /dev/null
+++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_27184.cnf
@@ -0,0 +1,2 @@
+!include include/default_mysqld.cnf
+!include ../my_1_1.cnf
diff --git a/storage/spider/mysql-test/spider/bugfix/t/mdev_27184.test b/storage/spider/mysql-test/spider/bugfix/t/mdev_27184.test
new file mode 100644
index 00000000000..9d3922b2c48
--- /dev/null
+++ b/storage/spider/mysql-test/spider/bugfix/t/mdev_27184.test
@@ -0,0 +1,31 @@
+--echo #
+--echo # MDEV-27184 Assertion `(old_top == initial_top (av) && old_size == 0) ||
+--echo # ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) &&
+--echo # ((unsigned long) old_end & (pagesize - 1)) == 0)' failed,
+--echo # Assertion `str.alloced_length() >= str.length() + data_len' failed
+--echo #
+
+--disable_query_log
+--disable_result_log
+--source ../../t/test_init.inc
+--enable_result_log
+--enable_query_log
+
+--connection master_1
+CREATE DATABASE auto_test_remote;
+USE auto_test_remote;
+
+CREATE TABLE tbl_a (a FLOAT) ENGINE=SPIDER;
+
+--error ER_CONNECT_TO_FOREIGN_DATA_SOURCE
+INSERT INTO tbl_a VALUES
+ (0xF5A7),(0xF5A8),(0xF5A9),(0xF5AA),(0xF5AB),(0xF5AC),(0xF5AD),(0xF5AE),
+ (0xF5A7),(0xF5A8),(0xF5A9),(0xF5AA),(0xF5AB),(0xF5AC),(0xF5AD),(0xF5AE);
+
+DROP DATABASE auto_test_remote;
+
+--disable_query_log
+--disable_result_log
+--source ../../t/test_deinit.inc
+--enable_result_log
+--enable_query_log
diff --git a/storage/spider/spd_db_mysql.cc b/storage/spider/spd_db_mysql.cc
index ee3c25d914c..3425a97049f 100644
--- a/storage/spider/spd_db_mysql.cc
+++ b/storage/spider/spd_db_mysql.cc
@@ -4243,7 +4243,7 @@ int spider_db_mariadb_util::append_column_value(
} else if (float_value)
{
if (str->reserve(SPIDER_SQL_CAST_LEN + ptr->length() +
- SPIDER_SQL_AS_FLOAT_LEN, SPIDER_SQL_CLOSE_PAREN_LEN))
+ SPIDER_SQL_AS_FLOAT_LEN + SPIDER_SQL_CLOSE_PAREN_LEN))
{
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
}