diff --git a/mysql-test/main/spatial_utility_function_collect.result b/mysql-test/main/spatial_utility_function_collect.result index d74f5987645..d5a87fe6243 100644 --- a/mysql-test/main/spatial_utility_function_collect.result +++ b/mysql-test/main/spatial_utility_function_collect.result @@ -135,3 +135,10 @@ tb1 CREATE TABLE `tb1` ( `(ST_collect(( POINTFROMTEXT(' POINT( 4 1 ) ') )) )` geometry DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci DROP TABLE tb1; +# +# MDEV-35975 Server crashes after CREATE VIEW as SELECT ST_COLLECT +# +create view v1 as SELECT ST_COLLECT(ST_GEOMFROMTEXT('POINT(0 0)')); +drop view v1; +create view v1 as SELECT GROUP_CONCAT(ST_GEOMFROMTEXT('POINT(0 0)')); +drop view v1; diff --git a/mysql-test/main/spatial_utility_function_collect.test b/mysql-test/main/spatial_utility_function_collect.test index 3e638d1d4e0..3c106ab19f5 100644 --- a/mysql-test/main/spatial_utility_function_collect.test +++ b/mysql-test/main/spatial_utility_function_collect.test @@ -197,3 +197,11 @@ SELECT ST_astext(ST_collect(( POINTFROMTEXT(' POINT( 4 1 ) ') ))); CREATE TABLE tb1 AS SELECT (ST_collect(( POINTFROMTEXT(' POINT( 4 1 ) ') )) ); SHOW CREATE TABLE tb1; DROP TABLE tb1; + +--echo # +--echo # MDEV-35975 Server crashes after CREATE VIEW as SELECT ST_COLLECT +--echo # +create view v1 as SELECT ST_COLLECT(ST_GEOMFROMTEXT('POINT(0 0)')); +drop view v1; +create view v1 as SELECT GROUP_CONCAT(ST_GEOMFROMTEXT('POINT(0 0)')); +drop view v1; \ No newline at end of file diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 9adcbc76779..919e73c7cd8 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -3553,6 +3553,9 @@ Item_sum_str::fix_fields(THD *thd, Item **ref) if (check_sum_func(thd, ref)) return TRUE; + if (arg_count) + memcpy (orig_args, args, sizeof (Item *) * arg_count); + base_flags|= item_base_t::FIXED; return FALSE; } @@ -3988,8 +3991,6 @@ Item_func_group_concat(THD *thd, Name_resolution_context *context_arg, /* orig_args is only used for print() */ orig_args= (Item**) (order + arg_count_order); - if (arg_count) - memcpy(orig_args, args, sizeof(Item*) * arg_count); if (limit_clause) { row_limit= row_limit_arg;