Commit b7f7c7dc authored by davi@buzz.(none)'s avatar davi@buzz.(none)

Post-merge fixes for Bug 35103

parent df5cf2b1
......@@ -4751,7 +4751,7 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
if (!mysql)
{
/* 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);
}
......
......@@ -395,8 +395,11 @@ Diagnostics_area::set_ok_status(THD *thd, ha_rows affected_rows_arg,
{
DBUG_ASSERT(! is_set());
#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;
#endif
/** Only allowed to report success if has not yet reported an error */
......@@ -424,8 +427,11 @@ Diagnostics_area::set_eof_status(THD *thd)
DBUG_ASSERT(! is_set());
#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;
#endif
......@@ -454,6 +460,14 @@ Diagnostics_area::set_error_status(THD *thd, uint sql_errno_arg,
an error can happen during the flush.
*/
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;
strmake(m_message, message_arg, sizeof(m_message) - 1);
......
......@@ -2555,6 +2555,8 @@ void mysql_stmt_close(THD *thd, char *packet)
Prepared_statement *stmt;
DBUG_ENTER("mysql_stmt_close");
thd->main_da.disable_status();
if (!(stmt= find_prepared_statement(thd, stmt_id, "mysql_stmt_close")))
DBUG_VOID_RETURN;
......@@ -2566,8 +2568,6 @@ void mysql_stmt_close(THD *thd, char *packet)
(void) stmt->deallocate();
general_log_print(thd, thd->command, NullS);
thd->main_da.disable_status();
DBUG_VOID_RETURN;
}
......
......@@ -12016,6 +12016,7 @@ static void test_bug5194()
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
mysql_stmt_reset(stmt);
}
mysql_stmt_close(stmt);
......@@ -16600,7 +16601,10 @@ static void test_bug27592()
DBUG_VOID_RETURN;
}
#if 0
/**
Bug#29948 autoreconnect + prepared statements + kill seems unstable
*/
static void test_bug29948()
{
......@@ -16614,7 +16618,10 @@ static void test_bug29948()
const char *query;
int buf;
unsigned long length, cursor_type;
DBUG_ENTER("test_bug29948");
myheader("test_bug29948");
dbc = mysql_init(NULL);
DIE_UNLESS(dbc);
......@@ -16650,7 +16657,7 @@ static void test_bug29948()
res= mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void *)&cursor_type);
myquery(res);
query= "SELECT * from t1 where a=?";
query= "SELECT * FROM t1 WHERE a=?";
res= mysql_stmt_prepare(stmt, query, strlen(query));
myquery(res);
......@@ -16662,20 +16669,23 @@ static void test_bug29948()
res= mysql_stmt_bind_result(stmt,&bind);
check_execute(stmt, res);
sprintf(kill_buf, "kill %ld", dbc->thread_id);
mysql_query(dbc, kill_buf);
my_snprintf(kill_buf, sizeof(kill_buf), "KILL %ld", dbc->thread_id);
res= mysql_query(dbc, kill_buf);
myquery(res);
res= mysql_stmt_store_result(stmt);
DIE_UNLESS(res);
mysql_stmt_free_result(stmt);
mysql_stmt_close(stmt);
mysql_query(dbc, "DROP TABLE t1");
res= mysql_query(dbc, "DROP TABLE t1");
myquery(res);
mysql_close(dbc);
}
#endif
/*
Bug#29687 mysql_stmt_store_result memory leak in libmysqld
......@@ -17715,7 +17725,7 @@ static struct my_tests_st my_tests[]= {
{ "test_bug28505", test_bug28505 },
{ "test_bug28934", test_bug28934 },
{ "test_bug27592", test_bug27592 },
/* { "test_bug29948", test_bug29948 }, */
{ "test_bug29948", test_bug29948 },
{ "test_bug29687", test_bug29687 },
{ "test_bug29692", test_bug29692 },
{ "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