Commit f75c97d4 authored by unknown's avatar unknown

bug #25492 (Invalid deallocation in mysql_stmt_fetch())

Additional patch.
mysql_flush_use_result() fixed.


libmysqld/lib_sql.cc:
  now emb_flush_use_result() uses emb_free_rows()
  duplicating code removed
parent 07efefd2
...@@ -69,10 +69,14 @@ void embedded_get_error(MYSQL *mysql) ...@@ -69,10 +69,14 @@ void embedded_get_error(MYSQL *mysql)
static void emb_free_rows(THD *thd) static void emb_free_rows(THD *thd)
{ {
if (!thd->data)
return;
if (thd->current_stmt) if (thd->current_stmt)
free_root(&thd->data->alloc,MYF(0)); free_root(&thd->data->alloc,MYF(0));
else else
free_rows(thd->data); free_rows(thd->data);
thd->data= NULL;
} }
...@@ -86,11 +90,8 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command, ...@@ -86,11 +90,8 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
THD *thd=(THD *) mysql->thd; THD *thd=(THD *) mysql->thd;
NET *net= &mysql->net; NET *net= &mysql->net;
if (thd->data) emb_free_rows(thd);
{
emb_free_rows(thd);
thd->data= 0;
}
/* Check that we are calling the client functions in right order */ /* Check that we are calling the client functions in right order */
if (mysql->status != MYSQL_STATUS_READY) if (mysql->status != MYSQL_STATUS_READY)
{ {
...@@ -143,13 +144,7 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command, ...@@ -143,13 +144,7 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
static void emb_flush_use_result(MYSQL *mysql) static void emb_flush_use_result(MYSQL *mysql)
{ {
MYSQL_DATA *data= ((THD*)(mysql->thd))->data; emb_free_rows((THD*) (mysql->thd));
if (data)
{
free_rows(data);
((THD*)(mysql->thd))->data= NULL;
}
} }
static MYSQL_DATA * static MYSQL_DATA *
...@@ -304,8 +299,7 @@ int emb_unbuffered_fetch(MYSQL *mysql, char **row) ...@@ -304,8 +299,7 @@ int emb_unbuffered_fetch(MYSQL *mysql, char **row)
static void emb_free_embedded_thd(MYSQL *mysql) static void emb_free_embedded_thd(MYSQL *mysql)
{ {
THD *thd= (THD*)mysql->thd; THD *thd= (THD*)mysql->thd;
if (thd->data) emb_free_rows(thd);
emb_free_rows(thd);
thread_count--; thread_count--;
delete thd; delete thd;
mysql->thd=0; mysql->thd=0;
......
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