Commit 41c3732a authored by Alexey Kopytov's avatar Alexey Kopytov

Addendum for the fix for bug #42064:

In Prepared_statement::prepare() bail out as soon as
parser_state.init() fails, trying to continue leads to crashes.
parent 2400e54a
...@@ -3034,16 +3034,21 @@ bool Prepared_statement::prepare(const char *packet, uint packet_len) ...@@ -3034,16 +3034,21 @@ bool Prepared_statement::prepare(const char *packet, uint packet_len)
thd->stmt_arena= this; thd->stmt_arena= this;
Parser_state parser_state; Parser_state parser_state;
if (!parser_state.init(thd, thd->query(), thd->query_length())) if (parser_state.init(thd, thd->query(), thd->query_length()))
{ {
parser_state.m_lip.stmt_prepare_mode= TRUE; thd->restore_backup_statement(this, &stmt_backup);
lex_start(thd); thd->restore_active_arena(this, &stmt_backup);
thd->stmt_arena= old_stmt_arena;
error= parse_sql(thd, & parser_state, NULL) || DBUG_RETURN(TRUE);
thd->is_error() ||
init_param_array(this);
} }
parser_state.m_lip.stmt_prepare_mode= TRUE;
lex_start(thd);
error= parse_sql(thd, & parser_state, NULL) ||
thd->is_error() ||
init_param_array(this);
lex->set_trg_event_type_for_tables(); lex->set_trg_event_type_for_tables();
/* /*
......
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