mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
bug #25492 (Invalid deallocation in mysql_stmt_fetch())
Additional patch. mysql_flush_use_result() fixed.
This commit is contained in:
@ -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,
|
|||||||
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,
|
|||||||
|
|
||||||
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)
|
|||||||
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;
|
||||||
|
Reference in New Issue
Block a user