1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

Fixes bug #14569. When no db is selected as current and we do create procedure db.sp()...

we changing current db temporarily and restore it when sp is created. however thd->db
in this case becomes empty string rather than NULL and so all checks of thd->db == NULL 
will be false. So if after this we'll issue create procedure sp2()... without specifying
db it will succeed and create sp with db=NULL, which causes mysqldto crash on 
show procedure status statement.

This patch fixes the problem.


mysql-test/r/sp-error.result:
  Result for bug #14569.
mysql-test/t/sp-error.test:
  Test for bug #14569.
sql/sql_db.cc:
  Fixes bug #14569. When no db is selected as current and we do create procedure db.sp()...
  we changing current db temporarily and restore it when sp is created. however thd->db
  in this case becomes empty string rather than NULL and so all checks of thd->db == NULL 
  will be false. This patch fixes this issue.
sql/sql_parse.cc:
  Fixes bug #14569. Reverted from initial patch to check thd->db for null values only.
This commit is contained in:
unknown
2005-11-11 21:01:48 +03:00
parent cb38411696
commit 1c677f8c55
4 changed files with 41 additions and 3 deletions

View File

@@ -1163,8 +1163,17 @@ bool mysql_change_db(THD *thd, const char *name, bool no_access_check)
}
end:
x_free(thd->db);
thd->db=dbname; // THD::~THD will free this
thd->db_length=db_length;
if (dbname && dbname[0] == 0)
{
x_free(dbname);
thd->db= NULL;
thd->db_length= 0;
}
else
{
thd->db= dbname; // THD::~THD will free this
thd->db_length= db_length;
}
#ifndef NO_EMBEDDED_ACCESS_CHECKS
if (!no_access_check)
sctx->db_access= db_access;