diff options
author | unknown <bar@mysql.com> | 2006-05-18 12:21:13 +0500 |
---|---|---|
committer | unknown <bar@mysql.com> | 2006-05-18 12:21:13 +0500 |
commit | 9c686c8a68af12b3a491dc8049b7ddc50db8010e (patch) | |
tree | bec37258ef1c39ae65c60629526a1ace74c597b0 | |
parent | de0e4a9a8fe58ff025554d6fe3db1641b3c9ffe4 (diff) | |
download | mariadb-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.result | 4 | ||||
-rw-r--r-- | mysql-test/t/renamedb.test | 8 | ||||
-rw-r--r-- | sql/sql_db.cc | 6 |
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); } |