[MDEV-12368] Crash after reporting an error when using mutually recursive CTE Created: 2017-03-27  Updated: 2017-03-28  Resolved: 2017-03-28

Status: Closed
Project: MariaDB Server
Component/s: Optimizer - CTE
Affects Version/s: 10.2.4
Fix Version/s: 10.2.5

Type: Bug Priority: Major
Reporter: Igor Babaev Assignee: Igor Babaev
Resolution: Fixed Votes: 0
Labels: None


 Description   

The following test case:

create table value_nodes (v char(4));
create table module_nodes(m char(4));
create table module_arguments(m char(4), v char(4));
create table module_results(m char(4), v char(4));
 
with recursive
reached_values as 
(
  select v from value_nodes where v in ('v3','v7','v9')
  union
  select module_results.v from module_results, applied_modules
     where module_results.m = applied_modules.m
),
applied_modules as
(
  select module_nodes.m
  from
    module_nodes
    left join
    ( 
      module_arguments
      left join
      reached_values
      on module_arguments.v = reached_values.v
     )
     on reached_values.v is null and
     module_nodes.m = module_arguments.m
  where module_arguments.m is null
)
select * from reached_values;

causes a crash of the server after reporting the error:

ERROR 4008 (HY000): Restrictions imposed on recursive definitions are violated for table 'applied_modules'.

This can be seen in debugger.
The debugger reports:

Thread 33 "mysqld" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff426c300 (LWP 15272)]
0x00000000006ca3f0 in mysql_derived_prepare (thd=0x7fff80000b00, lex=0x7fff80004518, derived=0x7fff80013698) at /home/igor/maria-git/10.2/sql/sql_derived.cc:794



 Comments   
Comment by Igor Babaev [ 2017-03-28 ]

The fix for this bug was pushed into the 10.2 tree.

Generated at Thu Feb 08 07:57:11 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.