From 1408e26d0b15ea95d3d017bb059cd65b53b00a86 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Fri, 15 May 2020 06:15:10 +0400 Subject: MDEV-22560 Crash on a table value constructor with an SP variable fix_fields_for_tvc() could call fix_fields() for Items that have already been fixed before. Changing fix_fields() to fix_fields_if_needed(). --- sql/sql_tvc.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'sql/sql_tvc.cc') diff --git a/sql/sql_tvc.cc b/sql/sql_tvc.cc index b4538248e07..92cd229eebb 100644 --- a/sql/sql_tvc.cc +++ b/sql/sql_tvc.cc @@ -52,7 +52,14 @@ bool fix_fields_for_tvc(THD *thd, List_iterator_fast &li) while ((item= it++)) { - if (item->fix_fields(thd, 0)) + /* + Some items have already been fixed. + For example Item_splocal items get fixed in + Item_splocal::append_for_log(), which is called from subst_spvars() + while replacing their values to NAME_CONST()s. + So fix only those that have not been. + */ + if (item->fix_fields_if_needed(thd, 0)) DBUG_RETURN(true); } } -- cgit v1.2.1