Commit 80952259 authored by unknown's avatar unknown

Post-merge fixes for Bug 35103


libmysql/libmysql.c:
  Manual merge
sql/sql_class.cc:
  Don't send anything back to the client if disabled.
sql/sql_prepare.cc:
  Don't send any packet back for statement close.
tests/mysql_client_test.c:
  Manual merge
parent ce34828e
...@@ -4751,7 +4751,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt) ...@@ -4751,7 +4751,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
if (!mysql) if (!mysql)
{ {
/* mysql can be reset in mysql_close called from mysql_reconnect */ /* mysql can be reset in mysql_close called from mysql_reconnect */
set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate); set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate, NULL);
DBUG_RETURN(1); DBUG_RETURN(1);
} }
......
...@@ -395,8 +395,11 @@ Diagnostics_area::set_ok_status(THD *thd, ha_rows affected_rows_arg, ...@@ -395,8 +395,11 @@ Diagnostics_area::set_ok_status(THD *thd, ha_rows affected_rows_arg,
{ {
DBUG_ASSERT(! is_set()); DBUG_ASSERT(! is_set());
#ifdef DBUG_OFF #ifdef DBUG_OFF
/* In production, refuse to overwrite an error with an OK packet. */ /*
if (is_error()) In production, refuse to overwrite an error or a custom response
with an OK packet.
*/
if (is_error() || is_disabled())
return; return;
#endif #endif
/** Only allowed to report success if has not yet reported an error */ /** Only allowed to report success if has not yet reported an error */
...@@ -424,8 +427,11 @@ Diagnostics_area::set_eof_status(THD *thd) ...@@ -424,8 +427,11 @@ Diagnostics_area::set_eof_status(THD *thd)
DBUG_ASSERT(! is_set()); DBUG_ASSERT(! is_set());
#ifdef DBUG_OFF #ifdef DBUG_OFF
/* In production, refuse to overwrite an error with an EOF packet. */ /*
if (is_error()) In production, refuse to overwrite an error or a custom response
with an EOF packet.
*/
if (is_error() || is_disabled())
return; return;
#endif #endif
...@@ -454,6 +460,14 @@ Diagnostics_area::set_error_status(THD *thd, uint sql_errno_arg, ...@@ -454,6 +460,14 @@ Diagnostics_area::set_error_status(THD *thd, uint sql_errno_arg,
an error can happen during the flush. an error can happen during the flush.
*/ */
DBUG_ASSERT(! is_set() || can_overwrite_status); DBUG_ASSERT(! is_set() || can_overwrite_status);
#ifdef DBUG_OFF
/*
In production, refuse to overwrite a custom response with an
ERROR packet.
*/
if (is_disabled())
return;
#endif
m_sql_errno= sql_errno_arg; m_sql_errno= sql_errno_arg;
strmake(m_message, message_arg, sizeof(m_message) - 1); strmake(m_message, message_arg, sizeof(m_message) - 1);
......
...@@ -2555,6 +2555,8 @@ void mysql_stmt_close(THD *thd, char *packet) ...@@ -2555,6 +2555,8 @@ void mysql_stmt_close(THD *thd, char *packet)
Prepared_statement *stmt; Prepared_statement *stmt;
DBUG_ENTER("mysql_stmt_close"); DBUG_ENTER("mysql_stmt_close");
thd->main_da.disable_status();
if (!(stmt= find_prepared_statement(thd, stmt_id, "mysql_stmt_close"))) if (!(stmt= find_prepared_statement(thd, stmt_id, "mysql_stmt_close")))
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
...@@ -2566,8 +2568,6 @@ void mysql_stmt_close(THD *thd, char *packet) ...@@ -2566,8 +2568,6 @@ void mysql_stmt_close(THD *thd, char *packet)
(void) stmt->deallocate(); (void) stmt->deallocate();
general_log_print(thd, thd->command, NullS); general_log_print(thd, thd->command, NullS);
thd->main_da.disable_status();
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
......
...@@ -12016,6 +12016,7 @@ static void test_bug5194() ...@@ -12016,6 +12016,7 @@ static void test_bug5194()
rc= mysql_stmt_execute(stmt); rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc); check_execute(stmt, rc);
mysql_stmt_reset(stmt);
} }
mysql_stmt_close(stmt); mysql_stmt_close(stmt);
...@@ -16600,7 +16601,10 @@ static void test_bug27592() ...@@ -16600,7 +16601,10 @@ static void test_bug27592()
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
#if 0
/**
Bug#29948 autoreconnect + prepared statements + kill seems unstable
*/
static void test_bug29948() static void test_bug29948()
{ {
...@@ -16615,6 +16619,9 @@ static void test_bug29948() ...@@ -16615,6 +16619,9 @@ static void test_bug29948()
int buf; int buf;
unsigned long length, cursor_type; unsigned long length, cursor_type;
DBUG_ENTER("test_bug29948");
myheader("test_bug29948");
dbc = mysql_init(NULL); dbc = mysql_init(NULL);
DIE_UNLESS(dbc); DIE_UNLESS(dbc);
...@@ -16650,7 +16657,7 @@ static void test_bug29948() ...@@ -16650,7 +16657,7 @@ static void test_bug29948()
res= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void *)&cursor_type); res= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void *)&cursor_type);
myquery(res); myquery(res);
query= "SELECT * from t1 where a=?"; query= "SELECT * FROM t1 WHERE a=?";
res= mysql_stmt_prepare(stmt, query, strlen(query)); res= mysql_stmt_prepare(stmt, query, strlen(query));
myquery(res); myquery(res);
...@@ -16663,19 +16670,22 @@ static void test_bug29948() ...@@ -16663,19 +16670,22 @@ static void test_bug29948()
res= mysql_stmt_bind_result(stmt,&bind); res= mysql_stmt_bind_result(stmt,&bind);
check_execute(stmt, res); check_execute(stmt, res);
sprintf(kill_buf, "kill %ld", dbc->thread_id); my_snprintf(kill_buf, sizeof(kill_buf), "KILL %ld", dbc->thread_id);
mysql_query(dbc, kill_buf); res= mysql_query(dbc, kill_buf);
myquery(res);
res= mysql_stmt_store_result(stmt); res= mysql_stmt_store_result(stmt);
DIE_UNLESS(res); DIE_UNLESS(res);
mysql_stmt_free_result(stmt); mysql_stmt_free_result(stmt);
mysql_stmt_close(stmt); mysql_stmt_close(stmt);
mysql_query(dbc, "DROP TABLE t1");
res= mysql_query(dbc, "DROP TABLE t1");
myquery(res);
mysql_close(dbc); mysql_close(dbc);
} }
#endif
/* /*
Bug#29687 mysql_stmt_store_result memory leak in libmysqld Bug#29687 mysql_stmt_store_result memory leak in libmysqld
...@@ -17715,7 +17725,7 @@ static struct my_tests_st my_tests[]= { ...@@ -17715,7 +17725,7 @@ static struct my_tests_st my_tests[]= {
{ "test_bug28505", test_bug28505 }, { "test_bug28505", test_bug28505 },
{ "test_bug28934", test_bug28934 }, { "test_bug28934", test_bug28934 },
{ "test_bug27592", test_bug27592 }, { "test_bug27592", test_bug27592 },
/* { "test_bug29948", test_bug29948 }, */ { "test_bug29948", test_bug29948 },
{ "test_bug29687", test_bug29687 }, { "test_bug29687", test_bug29687 },
{ "test_bug29692", test_bug29692 }, { "test_bug29692", test_bug29692 },
{ "test_bug29306", test_bug29306 }, { "test_bug29306", test_bug29306 },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment