You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
399 lines
12 KiB
399 lines
12 KiB
|
|
#
|
|
# These tests are designed to cause an internal parser stack overflow,
|
|
# and trigger my_yyoverflow().
|
|
#
|
|
|
|
use test;
|
|
|
|
SELECT
|
|
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
|
|
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
|
|
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
|
|
1
|
|
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
|
|
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
|
|
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
|
|
;
|
|
|
|
prepare stmt from
|
|
"
|
|
SELECT
|
|
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
|
|
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
|
|
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
|
|
1
|
|
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
|
|
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
|
|
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
|
|
"
|
|
;
|
|
|
|
execute stmt;
|
|
|
|
--disable_warnings
|
|
drop view if exists view_overflow;
|
|
--enable_warnings
|
|
|
|
CREATE VIEW view_overflow AS
|
|
SELECT
|
|
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
|
|
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
|
|
((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
|
|
1
|
|
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
|
|
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
|
|
))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
|
|
;
|
|
|
|
SELECT * from view_overflow;
|
|
|
|
drop view view_overflow;
|
|
|
|
--disable_warnings
|
|
drop procedure if exists proc_overflow;
|
|
--enable_warnings
|
|
|
|
delimiter $$;
|
|
|
|
CREATE PROCEDURE proc_overflow()
|
|
BEGIN
|
|
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
|
|
select 1;
|
|
select 2;
|
|
select 3;
|
|
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
|
|
END $$
|
|
|
|
delimiter ;$$
|
|
|
|
call proc_overflow();
|
|
|
|
drop procedure proc_overflow;
|
|
|
|
--disable_warnings
|
|
drop function if exists func_overflow;
|
|
--enable_warnings
|
|
|
|
delimiter $$;
|
|
|
|
create function func_overflow() returns int
|
|
BEGIN
|
|
DECLARE x int default 0;
|
|
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
|
|
SET x=x+1;
|
|
SET x=x+2;
|
|
SET x=x+3;
|
|
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
|
|
return x;
|
|
END $$
|
|
|
|
delimiter ;$$
|
|
|
|
select func_overflow();
|
|
|
|
drop function func_overflow;
|
|
|
|
--disable_warnings
|
|
drop table if exists table_overflow;
|
|
--enable_warnings
|
|
|
|
create table table_overflow(a int, b int);
|
|
|
|
delimiter $$;
|
|
|
|
create trigger trigger_overflow before insert on table_overflow
|
|
for each row
|
|
BEGIN
|
|
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
|
|
|
|
SET NEW.b := NEW.a;
|
|
SET NEW.b := NEW.b + 1;
|
|
SET NEW.b := NEW.b + 2;
|
|
SET NEW.b := NEW.b + 3;
|
|
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
END; END; END; END; END; END; END; END; END; END; END; END;
|
|
|
|
END $$
|
|
|
|
delimiter ;$$
|
|
|
|
insert into table_overflow set a=10;
|
|
insert into table_overflow set a=20;
|
|
select * from table_overflow;
|
|
|
|
drop table table_overflow;
|
|
|
|
--disable_warnings
|
|
drop procedure if exists proc_35577;
|
|
--enable_warnings
|
|
|
|
delimiter $$;
|
|
|
|
CREATE PROCEDURE proc_35577()
|
|
BEGIN
|
|
DECLARE z_done INT DEFAULT 0;
|
|
DECLARE t_done VARCHAR(5000);
|
|
outer_loop: LOOP
|
|
IF t_done=1 THEN
|
|
LEAVE outer_loop;
|
|
END IF;
|
|
|
|
inner_block:BEGIN
|
|
DECLARE z_done INT DEFAULT 0;
|
|
SET z_done = 0;
|
|
inner_loop: LOOP
|
|
IF z_done=1 THEN
|
|
LEAVE inner_loop;
|
|
END IF;
|
|
IF (t_done = 'a') THEN
|
|
IF (t_done <> 0) THEN
|
|
IF ( t_done > 0) THEN
|
|
IF (t_done = 'a') THEN
|
|
SET t_done = 'a';
|
|
ELSEIF (t_done = 'a') THEN
|
|
SET t_done = 'a';
|
|
ELSEIF(t_done = 'a') THEN
|
|
SET t_done = 'a';
|
|
ELSEIF(t_done = 'a') THEN
|
|
SET t_done = 'a';
|
|
ELSEIF(t_done = 'a') THEN
|
|
SET t_done = 'a';
|
|
ELSEIF(t_done = 'a') THEN
|
|
SET t_done = 'a';
|
|
ELSEIF(t_done = 'a') THEN
|
|
SET t_done = 'a';
|
|
ELSEIF(t_done = 'a') THEN
|
|
SET t_done = 'a';
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
END LOOP inner_loop;
|
|
END inner_block;
|
|
END LOOP outer_loop;
|
|
END $$
|
|
|
|
delimiter ;$$
|
|
|
|
drop procedure proc_35577;
|
|
|
|
#
|
|
# Bug#37269 (parser crash when creating stored procedure)
|
|
#
|
|
|
|
--disable_warnings
|
|
drop procedure if exists p_37269;
|
|
--enable_warnings
|
|
|
|
delimiter $$;
|
|
|
|
create procedure p_37269()
|
|
begin
|
|
declare done int default 0;
|
|
declare varb int default 0;
|
|
declare vara int default 0;
|
|
|
|
repeat
|
|
select now();
|
|
until done end repeat;
|
|
while varb do
|
|
select now();
|
|
begin
|
|
select now();
|
|
repeat
|
|
select now();
|
|
until done end repeat;
|
|
if vara then
|
|
select now();
|
|
repeat
|
|
select now();
|
|
loop
|
|
select now();
|
|
end loop;
|
|
repeat
|
|
select now();
|
|
label1: while varb do
|
|
select now();
|
|
end while label1;
|
|
if vara then
|
|
select now();
|
|
repeat
|
|
select now();
|
|
until done end repeat;
|
|
begin
|
|
select now();
|
|
while varb do
|
|
select now();
|
|
label1: while varb do
|
|
select now();
|
|
end while label1;
|
|
if vara then
|
|
select now();
|
|
while varb do
|
|
select now();
|
|
loop
|
|
select now();
|
|
end loop;
|
|
repeat
|
|
select now();
|
|
loop
|
|
select now();
|
|
while varb do
|
|
select now();
|
|
end while;
|
|
repeat
|
|
select now();
|
|
label1: loop
|
|
select now();
|
|
if vara then
|
|
select now();
|
|
end if;
|
|
end loop label1;
|
|
until done end repeat;
|
|
end loop;
|
|
until done end repeat;
|
|
end while;
|
|
end if;
|
|
end while;
|
|
end;
|
|
end if;
|
|
until done end repeat;
|
|
until done end repeat;
|
|
end if;
|
|
end;
|
|
end while;
|
|
end $$
|
|
|
|
delimiter ;$$
|
|
|
|
drop procedure p_37269;
|
|
|
|
#
|
|
# Bug#37228 (Sever crashes when creating stored procedure with more than
|
|
# 10 IF/ELSEIF)
|
|
#
|
|
|
|
--disable_warnings
|
|
drop procedure if exists p_37228;
|
|
--enable_warnings
|
|
|
|
delimiter $$;
|
|
|
|
create procedure p_37228 ()
|
|
BEGIN
|
|
DECLARE v INT DEFAULT 123;
|
|
|
|
IF (v > 1) THEN SET v = 1;
|
|
ELSEIF (v < 10) THEN SET v = 10;
|
|
ELSEIF (v < 11) THEN SET v = 11;
|
|
ELSEIF (v < 12) THEN SET v = 12;
|
|
ELSEIF (v < 13) THEN SET v = 13;
|
|
ELSEIF (v < 14) THEN SET v = 14;
|
|
ELSEIF (v < 15) THEN SET v = 15;
|
|
ELSEIF (v < 16) THEN SET v = 16;
|
|
ELSEIF (v < 17) THEN SET v = 17;
|
|
ELSEIF (v < 18) THEN SET v = 18;
|
|
ELSEIF (v < 19) THEN SET v = 19;
|
|
ELSEIF (v < 20) THEN SET v = 20;
|
|
ELSEIF (v < 21) THEN SET v = 21;
|
|
ELSEIF (v < 22) THEN SET v = 22;
|
|
ELSEIF (v < 23) THEN SET v = 23;
|
|
ELSEIF (v < 24) THEN SET v = 24;
|
|
ELSEIF (v < 25) THEN SET v = 25;
|
|
ELSEIF (v < 26) THEN SET v = 26;
|
|
ELSEIF (v < 27) THEN SET v = 27;
|
|
ELSEIF (v < 28) THEN SET v = 28;
|
|
ELSEIF (v < 29) THEN SET v = 29;
|
|
ELSEIF (v < 30) THEN SET v = 30;
|
|
ELSEIF (v < 31) THEN SET v = 31;
|
|
ELSEIF (v < 32) THEN SET v = 32;
|
|
ELSEIF (v < 33) THEN SET v = 33;
|
|
ELSEIF (v < 34) THEN SET v = 34;
|
|
ELSEIF (v < 35) THEN SET v = 35;
|
|
ELSEIF (v < 36) THEN SET v = 36;
|
|
ELSEIF (v < 37) THEN SET v = 37;
|
|
ELSEIF (v < 38) THEN SET v = 38;
|
|
ELSEIF (v < 39) THEN SET v = 39;
|
|
END IF;
|
|
END $$
|
|
|
|
delimiter ;$$
|
|
|
|
drop procedure p_37228;
|
|
|
|
#
|
|
# Bug#27863 (excessive memory usage for many small queries in a multiquery
|
|
# packet).
|
|
#
|
|
|
|
let $i=`select repeat("set @a=1;", 65535)`;
|
|
--disable_query_log
|
|
eval $i;
|
|
--enable_query_log
|
|
|
|
# Bug#27799194 - MAIN.PARSER_STACK FAILS CHECK-TESTCASE ON ASAN BUILD
|
|
--source include/force_restart.inc
|
|
|