summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Midenkov <midenok@gmail.com>2020-02-10 21:57:27 +0300
committerAleksey Midenkov <midenok@gmail.com>2020-02-10 21:57:27 +0300
commitf79f537f9facb5a050697ad3dbf6e4a617c3c128 (patch)
tree4bcfa17012c60ebdcab5a48aee0e6dabf8c5ad82
parent77c6382312535991d26c85e7eb5492f9b3a59e92 (diff)
downloadmariadb-git-f79f537f9facb5a050697ad3dbf6e4a617c3c128.tar.gz
MDEV-21690 LeakSanitizer: detected memory leaks in mem_heap_create_block_func
-rw-r--r--mysql-test/suite/innodb/r/foreign_key.result7
-rw-r--r--mysql-test/suite/innodb/t/foreign_key.test10
-rw-r--r--storage/innobase/handler/ha_innodb.cc4
3 files changed, 20 insertions, 1 deletions
diff --git a/mysql-test/suite/innodb/r/foreign_key.result b/mysql-test/suite/innodb/r/foreign_key.result
index 5fd49b3dd82..df5ae6088ad 100644
--- a/mysql-test/suite/innodb/r/foreign_key.result
+++ b/mysql-test/suite/innodb/r/foreign_key.result
@@ -565,4 +565,11 @@ t2 CREATE TABLE `t2` (
) ENGINE=InnoDB DEFAULT CHARSET=latin1
drop tables t2, t1;
set default_storage_engine= default;
+#
+# MDEV-21690 LeakSanitizer: detected memory leaks in mem_heap_create_block_func
+#
+CREATE TABLE t1 (a TEXT, b TEXT) ENGINE=InnoDB;
+ALTER TABLE t1 ADD FOREIGN KEY (a) REFERENCES t1 (b);
+ERROR HY000: Can't create table `test`.`t1` (errno: 150 "Foreign key constraint is incorrectly formed")
+DROP TABLE t1;
# End of 10.5 tests
diff --git a/mysql-test/suite/innodb/t/foreign_key.test b/mysql-test/suite/innodb/t/foreign_key.test
index 35136f7bca7..335d5347444 100644
--- a/mysql-test/suite/innodb/t/foreign_key.test
+++ b/mysql-test/suite/innodb/t/foreign_key.test
@@ -519,6 +519,16 @@ drop tables t2, t1;
set default_storage_engine= default;
+--echo #
+--echo # MDEV-21690 LeakSanitizer: detected memory leaks in mem_heap_create_block_func
+--echo #
+CREATE TABLE t1 (a TEXT, b TEXT) ENGINE=InnoDB;
+--error ER_CANT_CREATE_TABLE
+ALTER TABLE t1 ADD FOREIGN KEY (a) REFERENCES t1 (b);
+
+# Cleanup
+DROP TABLE t1;
+
--echo # End of 10.5 tests
--source include/wait_until_count_sessions.inc
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 03c88858676..e893c48d8d1 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -12339,7 +12339,7 @@ create_table_info_t::create_foreign_keys()
" failed. Column %s was not found.",
operation, create_name, k.str(),
column_names[i]);
-
+ dict_foreign_free(foreign);
return (DB_CANNOT_ADD_CONSTRAINT);
}
++i;
@@ -12353,6 +12353,7 @@ create_table_info_t::create_foreign_keys()
"allowed).",
operation, create_name, k.str(), i,
MAX_COLS_PER_FK);
+ dict_foreign_free(foreign);
return (DB_CANNOT_ADD_CONSTRAINT);
}
}
@@ -12367,6 +12368,7 @@ create_table_info_t::create_foreign_keys()
k.str(), column_names,
index_error, err_col,
err_index, table);
+ dict_foreign_free(foreign);
return (DB_CANNOT_ADD_CONSTRAINT);
}