From 01457ec280d44e853b95f0e88ad19e66a439abf6 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Thu, 23 Mar 2017 17:21:10 +0400 Subject: [PATCH] MDEV-12347 Valgrind reports invalid read errors in Item_field_row::element_index_by_name --- sql/sp_rcontext.cc | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/sql/sp_rcontext.cc b/sql/sp_rcontext.cc index d60d7f5118f..18f603f932d 100644 --- a/sql/sp_rcontext.cc +++ b/sql/sp_rcontext.cc @@ -222,11 +222,18 @@ bool sp_rcontext::resolve_table_rowtype_ref(THD *thd, { for (Field **src= lex.query_tables->table->field; *src; src++) { + /* + Make field names on the THD memory root, + as the table will be closed and freed soon, + in the end of this method. + */ + LEX_CSTRING tmp= {src[0]->field_name, strlen(src[0]->field_name)}; if ((rc= check_column_grant_for_type_ref(thd, table_list, - src[0]->field_name, - strlen(src[0]->field_name)))) + tmp.str, tmp.length)) || + (rc= !(src[0]->field_name= thd->strmake(tmp.str, tmp.length)))) break; Spvar_definition *def= new (thd->mem_root) Spvar_definition(thd, *src); + src[0]->field_name= tmp.str; // Restore field name, just in case. def->flags&= (uint) ~NOT_NULL_FLAG; if ((rc= def->sp_prepare_create_field(thd, thd->mem_root))) break;