From: Jorgen Loland Date: November 11 2010 3:13pm Subject: bzr commit into mysql-5.5-bugteam branch (jorgen.loland:3120) Bug#54812 List-Archive: http://lists.mysql.com/commits/123634 X-Bug: 54812 Message-Id: <20101111151317.E731E169D@atum21.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0668224773958843743==" --===============0668224773958843743== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/jl208045/mysql/mysql-5.5-bugteam-54812/ based on revid:svoj@stripped 3120 Jorgen Loland 2010-11-11 Bug#54812: assert in Diagnostics_area::set_ok_status during EXPLAIN Before the patch, send_eof() of some subclasses of select_result (e.g., select_send::send_eof()) could handle being called after an error had occured while others could not. The methods that were not well-behaved would trigger an ASSERT on debug builds. Release builds were not affected. In the bug, an ASSERT triggered because select_dumpvar::send_eof() was not well behaved after an error had occured, but the problem also applied to other subclasses of select_result. This patch uniforms send_eof() of all subclasses of select_result to handle being called after an error has occured. @ sql/sql_class.cc Make send_eof() of all subclasses of select_result handle being called after an error has occured. @ sql/sql_insert.cc Make send_eof() of all subclasses of select_result handle being called after an error has occured. @ sql/sql_prepare.cc Make send_eof() of all subclasses of select_result handle being called after an error has occured. @ sql/sql_update.cc Make send_eof() of all subclasses of select_result handle being called after an error has occured. modified: mysql-test/r/not_embedded_server.result mysql-test/t/not_embedded_server.test sql/sql_class.cc sql/sql_insert.cc sql/sql_prepare.cc sql/sql_update.cc === modified file 'mysql-test/r/not_embedded_server.result' --- a/mysql-test/r/not_embedded_server.result 2009-12-04 23:02:48 +0000 +++ b/mysql-test/r/not_embedded_server.result 2010-11-11 15:13:13 +0000 @@ -14,3 +14,32 @@ flush privileges; ERROR HY000: Table 'host' was not locked with LOCK TABLES unlock tables; drop table t1; +# +# Bug#54812: assert in Diagnostics_area::set_ok_status during EXPLAIN +# +CREATE USER nopriv_user@localhost; +connection: default +DROP TABLE IF EXISTS t1,t2; +DROP FUNCTION IF EXISTS f; +CREATE TABLE t1 (key1 INT PRIMARY KEY); +CREATE TABLE t2 (key2 INT); +INSERT INTO t1 VALUES (1),(2); +CREATE FUNCTION f() RETURNS INT RETURN 1; +GRANT FILE ON *.* TO 'nopriv_user'@'localhost'; +FLUSH PRIVILEGES; +connection: con1 +SELECT MAX(key1) FROM t1 WHERE f() < 1 INTO OUTFILE 'mytest'; +ERROR 42000: execute command denied to user 'nopriv_user'@'localhost' for routine 'test.f' +INSERT INTO t2 SELECT MAX(key1) FROM t1 WHERE f() < 1; +ERROR 42000: execute command denied to user 'nopriv_user'@'localhost' for routine 'test.f' +SELECT MAX(key1) INTO @dummy FROM t1 WHERE f() < 1; +ERROR 42000: execute command denied to user 'nopriv_user'@'localhost' for routine 'test.f' +CREATE TABLE t3 (i INT) AS SELECT MAX(key1) FROM t1 WHERE f() < 1; +ERROR 42000: execute command denied to user 'nopriv_user'@'localhost' for routine 'test.f' +connection: default +DROP TABLE t1,t2; +DROP FUNCTION f; +DROP USER nopriv_user@localhost; +# +# End Bug#57882 +# === modified file 'mysql-test/t/not_embedded_server.test' --- a/mysql-test/t/not_embedded_server.test 2009-12-04 23:02:48 +0000 +++ b/mysql-test/t/not_embedded_server.test 2010-11-11 15:13:13 +0000 @@ -54,3 +54,57 @@ lock tables t1 read; flush privileges; unlock tables; drop table t1; + +--echo # +--echo # Bug#54812: assert in Diagnostics_area::set_ok_status during EXPLAIN +--echo # + +CREATE USER nopriv_user@localhost; + +connection default; +--echo connection: default + +--disable_warnings +DROP TABLE IF EXISTS t1,t2; +DROP FUNCTION IF EXISTS f; +--enable_warnings + +CREATE TABLE t1 (key1 INT PRIMARY KEY); +CREATE TABLE t2 (key2 INT); +INSERT INTO t1 VALUES (1),(2); + +CREATE FUNCTION f() RETURNS INT RETURN 1; + +GRANT FILE ON *.* TO 'nopriv_user'@'localhost'; + +FLUSH PRIVILEGES; + +connect (con1,localhost,nopriv_user,,); +connection con1; +--echo connection: con1 + +--error ER_PROCACCESS_DENIED_ERROR +SELECT MAX(key1) FROM t1 WHERE f() < 1 INTO OUTFILE 'mytest'; + +--error ER_PROCACCESS_DENIED_ERROR +INSERT INTO t2 SELECT MAX(key1) FROM t1 WHERE f() < 1; + +--error ER_PROCACCESS_DENIED_ERROR +SELECT MAX(key1) INTO @dummy FROM t1 WHERE f() < 1; + +--error ER_PROCACCESS_DENIED_ERROR +CREATE TABLE t3 (i INT) AS SELECT MAX(key1) FROM t1 WHERE f() < 1; + +disconnect con1; +--source include/wait_until_disconnected.inc + +connection default; +--echo connection: default + +DROP TABLE t1,t2; +DROP FUNCTION f; +DROP USER nopriv_user@localhost; + +--echo # +--echo # End Bug#57882 +--echo # === modified file 'sql/sql_class.cc' --- a/sql/sql_class.cc 2010-10-23 13:09:27 +0000 +++ b/sql/sql_class.cc 2010-11-11 15:13:13 +0000 @@ -1841,6 +1841,13 @@ void select_to_file::send_error(uint err bool select_to_file::send_eof() { + /* + Don't send EOF if we're in error condition (which implies we've already + sent or are sending an error) + */ + if (thd->is_error()) + return TRUE; + int error= test(end_io_cache(&cache)); if (mysql_file_close(file, MYF(MY_WME))) error= 1; @@ -2881,6 +2888,13 @@ bool select_dumpvar::send_data(Listis_error()) + return TRUE; + if (! row_count) push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_SP_FETCH_NO_DATA, ER(ER_SP_FETCH_NO_DATA)); === modified file 'sql/sql_insert.cc' --- a/sql/sql_insert.cc 2010-10-07 10:01:51 +0000 +++ b/sql/sql_insert.cc 2010-11-11 15:13:13 +0000 @@ -3504,6 +3504,13 @@ bool select_insert::send_eof() DBUG_PRINT("enter", ("trans_table=%d, table_type='%s'", trans_table, table->file->table_type())); + /* + Don't send EOF if we're in error condition (which implies we've already + sent or are sending an error) + */ + if (thd->is_error()) + DBUG_RETURN(TRUE); + error= (thd->locked_tables_mode <= LTM_LOCK_TABLES ? table->file->ha_end_bulk_insert() : 0); table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY); @@ -4047,6 +4054,13 @@ void select_create::send_error(uint errc bool select_create::send_eof() { + /* + Don't send EOF if we're in error condition (which implies we've already + sent or are sending an error) + */ + if (thd->is_error()) + return TRUE; + bool tmp=select_insert::send_eof(); if (tmp) abort(); === modified file 'sql/sql_prepare.cc' --- a/sql/sql_prepare.cc 2010-11-03 14:15:18 +0000 +++ b/sql/sql_prepare.cc 2010-11-11 15:13:13 +0000 @@ -2898,6 +2898,13 @@ bool Select_fetch_protocol_binary::send_ bool Select_fetch_protocol_binary::send_eof() { + /* + Don't send EOF if we're in error condition (which implies we've already + sent or are sending an error) + */ + if (thd->is_error()) + return TRUE; + ::my_eof(thd); return FALSE; } === modified file 'sql/sql_update.cc' --- a/sql/sql_update.cc 2010-10-07 10:01:51 +0000 +++ b/sql/sql_update.cc 2010-11-11 15:13:13 +0000 @@ -2061,6 +2061,13 @@ bool multi_update::send_eof() thd_proc_info(thd, "updating reference tables"); /* + Don't send EOF if we're in error condition (which implies we've already + sent or are sending an error) + */ + if (thd->is_error()) + return TRUE; + + /* Does updates for the last n - 1 tables, returns 0 if ok; error takes into account killed status gained in do_updates() */ --===============0668224773958843743== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jorgen.loland@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jorgen.loland@stripped\ # fwil7yeeesc9ewgy # target_branch: file:///export/home/jl208045/mysql/mysql-5.5-bugteam-\ # 54812/ # testament_sha1: cc5f4eba0680898bcd712b35b1bf84550d9166fe # timestamp: 2010-11-11 16:13:17 +0100 # base_revision_id: svoj@stripped # # Begin bundle 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 --===============0668224773958843743==--