summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <bar@mysql.com>2006-05-18 12:21:13 +0500
committerunknown <bar@mysql.com>2006-05-18 12:21:13 +0500
commit9c686c8a68af12b3a491dc8049b7ddc50db8010e (patch)
treebec37258ef1c39ae65c60629526a1ace74c597b0
parentde0e4a9a8fe58ff025554d6fe3db1641b3c9ffe4 (diff)
downloadmariadb-git-9c686c8a68af12b3a491dc8049b7ddc50db8010e.tar.gz
Bug#19392 Rename Database: Crash if case change
Problem: Renaming a database to itself crashed server. It hapenned because of wrong DBUG_ASSERT. Fix: removing wrong DBUG_ASSERT. Now it reports a correct error message "database alreadt exists". mysql-test/r/renamedb.result: Adding test case mysql-test/t/renamedb.test: Adding test case sql/sql_db.cc: DBUG_ASSERT crashed server when renaming a database to itself.
-rw-r--r--mysql-test/r/renamedb.result4
-rw-r--r--mysql-test/t/renamedb.test8
-rw-r--r--sql/sql_db.cc6
3 files changed, 15 insertions, 3 deletions
diff --git a/mysql-test/r/renamedb.result b/mysql-test/r/renamedb.result
index 26ae42e72aa..b22322fbe8d 100644
--- a/mysql-test/r/renamedb.result
+++ b/mysql-test/r/renamedb.result
@@ -27,3 +27,7 @@ a
2
3
drop database testdb2;
+create database testdb1;
+rename database testdb1 to testdb1;
+ERROR HY000: Can't create database 'testdb1'; database exists
+drop database testdb1;
diff --git a/mysql-test/t/renamedb.test b/mysql-test/t/renamedb.test
index 5cfb2ce0c12..1e71adb3bf3 100644
--- a/mysql-test/t/renamedb.test
+++ b/mysql-test/t/renamedb.test
@@ -16,3 +16,11 @@ select database();
show tables;
select a from t1 order by a;
drop database testdb2;
+
+#
+# Bug#19392 Rename Database: Crash if case change
+#
+create database testdb1;
+--error 1007
+rename database testdb1 to testdb1;
+drop database testdb1;
diff --git a/sql/sql_db.cc b/sql/sql_db.cc
index 3d035359b6f..cb43bb77def 100644
--- a/sql/sql_db.cc
+++ b/sql/sql_db.cc
@@ -134,9 +134,9 @@ void lock_db_delete(const char *name, uint length)
{
my_dblock_t *opt;
safe_mutex_assert_owner(&LOCK_lock_db);
- opt= (my_dblock_t *)hash_search(&lock_db_cache, (const byte*) name, length);
- DBUG_ASSERT(opt != NULL);
- hash_delete(&lock_db_cache, (byte*) opt);
+ if (opt= (my_dblock_t *)hash_search(&lock_db_cache,
+ (const byte*) name, length))
+ hash_delete(&lock_db_cache, (byte*) opt);
}