From 717d6054f516baa35e14ac11f0a06c630b9e9fd9 Mon Sep 17 00:00:00 2001 From: "Tatiana A. Nurnberg" Date: Fri, 31 Jul 2009 14:38:18 +0200 Subject: Bug#40281, partitioning the general log table crashes the server We disallow the partitioning of a log table. You could however partition a table first, and then point logging to it. This is not only against the docs, it also crashes the server. We catch this case now. mysql-test/r/partition.result: results for 40281 mysql-test/t/partition.test: test for 40281: show that trying to log to partitioned table fails rather to crash the server sql/ha_partition.cc: Signal that we no longer support logging to partitioned tables, as per the docs. sql/sql_partition.cc: Some commands like "USE ..." have no select, yet we may try to parse partition info after their execution if user set a partitioned table as log target. This shouldn't lead to a NULL-deref/crash. --- sql/sql_partition.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'sql/sql_partition.cc') diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 284eaebbe87..a181a6b3f13 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -3824,8 +3824,13 @@ bool mysql_unpack_partition(THD *thd, Item_field objects. This is not a nice solution since if the parser uses current_select for anything else it will corrupt the current LEX object. + Also, we need to make sure there even is a select -- if the statement + was a "USE ...", current_select will be NULL, but we may still end up + here if we try to log to a partitioned table. This is currently + unsupported, but should still fail rather than crash! */ - thd->lex->current_select= old_lex->current_select; + if (!(thd->lex->current_select= old_lex->current_select)) + goto end; /* All Items created is put into a free list on the THD object. This list is used to free all Item objects after completing a query. We don't -- cgit v1.2.1