1#
2# These tests are designed to cause an internal parser stack overflow,
3# and trigger my_yyoverflow().
4#
5
6use test;
7
8SELECT
9((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
10((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
11((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
121
13))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
14))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
15))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
16;
17
18prepare stmt from
19"
20SELECT
21((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
22((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
23((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
241
25))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
26))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
27))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
28"
29;
30
31execute stmt;
32
33--disable_warnings
34drop view if exists view_overflow;
35--enable_warnings
36
37CREATE VIEW view_overflow AS
38SELECT
39((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
40((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
41((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
421
43))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
44))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
45))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
46;
47
48SELECT * from view_overflow;
49
50drop view view_overflow;
51
52--disable_warnings
53drop procedure if exists proc_overflow;
54--enable_warnings
55
56delimiter $$;
57
58CREATE PROCEDURE proc_overflow()
59BEGIN
60
61  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
62  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
63  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
64  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
65  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
66  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
67  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
68  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
69  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
70  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
71
72  select 1;
73  select 2;
74  select 3;
75
76  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
77  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
78  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
79  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
80  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
81  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
82  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
83  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
84  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
85  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
86
87END $$
88
89delimiter ;$$
90
91call proc_overflow();
92
93drop procedure proc_overflow;
94
95--disable_warnings
96drop function if exists func_overflow;
97--enable_warnings
98
99delimiter $$;
100
101create function func_overflow() returns int
102BEGIN
103  DECLARE x int default 0;
104
105  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
106  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
107  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
108  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
109  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
110  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
111  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
112  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
113  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
114  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
115
116  SET x=x+1;
117  SET x=x+2;
118  SET x=x+3;
119
120  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
121  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
122  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
123  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
124  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
125  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
126  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
127  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
128  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
129  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
130
131  return x;
132END $$
133
134delimiter ;$$
135
136select func_overflow();
137
138drop function func_overflow;
139
140--disable_warnings
141drop table if exists table_overflow;
142--enable_warnings
143
144create table table_overflow(a int, b int);
145
146delimiter $$;
147
148create trigger trigger_overflow before insert on table_overflow
149for each row
150BEGIN
151
152  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
153  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
154  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
155  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
156  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
157  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
158  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
159  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
160  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
161  BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
162
163  SET NEW.b := NEW.a;
164  SET NEW.b := NEW.b + 1;
165  SET NEW.b := NEW.b + 2;
166  SET NEW.b := NEW.b + 3;
167
168  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
169  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
170  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
171  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
172  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
173  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
174  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
175  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
176  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
177  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;  END;
178
179END $$
180
181delimiter ;$$
182
183insert into table_overflow set a=10;
184insert into table_overflow set a=20;
185select * from table_overflow;
186
187drop table table_overflow;
188
189--disable_warnings
190drop procedure if exists proc_35577;
191--enable_warnings
192
193delimiter $$;
194
195CREATE PROCEDURE proc_35577()
196BEGIN
197  DECLARE z_done INT DEFAULT 0;
198  DECLARE t_done VARCHAR(5000);
199  outer_loop: LOOP
200    IF t_done=1  THEN
201      LEAVE outer_loop;
202    END IF;
203
204    inner_block:BEGIN
205      DECLARE z_done INT DEFAULT  0;
206      SET z_done = 0;
207      inner_loop: LOOP
208        IF z_done=1  THEN
209          LEAVE inner_loop;
210        END IF;
211        IF (t_done = 'a') THEN
212          IF (t_done <> 0) THEN
213            IF ( t_done > 0) THEN
214              IF (t_done = 'a') THEN
215                SET t_done = 'a';
216              ELSEIF (t_done = 'a') THEN
217                SET t_done = 'a';
218              ELSEIF(t_done = 'a') THEN
219                SET t_done = 'a';
220              ELSEIF(t_done = 'a') THEN
221                SET t_done = 'a';
222              ELSEIF(t_done = 'a') THEN
223                SET t_done = 'a';
224              ELSEIF(t_done = 'a') THEN
225                SET t_done = 'a';
226              ELSEIF(t_done = 'a') THEN
227                SET t_done = 'a';
228              ELSEIF(t_done = 'a') THEN
229                SET t_done = 'a';
230              END IF;
231            END IF;
232          END IF;
233        END IF;
234      END LOOP inner_loop;
235    END inner_block;
236  END LOOP outer_loop;
237END $$
238
239delimiter ;$$
240
241drop procedure proc_35577;
242
243#
244# Bug#37269 (parser crash when creating stored procedure)
245#
246
247--disable_warnings
248drop procedure if exists p_37269;
249--enable_warnings
250
251delimiter $$;
252
253create procedure p_37269()
254begin
255  declare done int default 0;
256  declare varb int default 0;
257  declare vara int default 0;
258
259  repeat
260    select now();
261  until done end repeat;
262  while varb do
263    select now();
264    begin
265      select now();
266      repeat
267        select now();
268      until done end repeat;
269      if vara then
270        select now();
271        repeat
272          select now();
273          loop
274            select now();
275          end loop;
276          repeat
277            select now();
278            label1: while varb do
279              select now();
280            end while label1;
281            if vara then
282              select now();
283              repeat
284                select now();
285              until done end repeat;
286              begin
287                select now();
288                while varb do
289                  select now();
290                  label1: while varb do
291                    select now();
292                  end while label1;
293                  if vara then
294                    select now();
295                    while varb do
296                      select now();
297                      loop
298                        select now();
299                      end loop;
300                      repeat
301                        select now();
302                        loop
303                          select now();
304                          while varb do
305                            select now();
306                          end while;
307                          repeat
308                            select now();
309                            label1: loop
310                              select now();
311                              if vara then
312                                select now();
313                              end if;
314                            end loop label1;
315                          until done end repeat;
316                        end loop;
317                      until done end repeat;
318                    end while;
319                  end if;
320                end while;
321              end;
322            end if;
323          until done end repeat;
324        until done end repeat;
325      end if;
326    end;
327  end while;
328end $$
329
330delimiter ;$$
331
332drop procedure p_37269;
333
334#
335# Bug#37228 (Sever crashes when creating stored procedure with more than
336#            10 IF/ELSEIF)
337#
338
339--disable_warnings
340drop procedure if exists p_37228;
341--enable_warnings
342
343delimiter $$;
344
345create procedure p_37228 ()
346BEGIN
347  DECLARE v INT DEFAULT 123;
348
349  IF (v > 1) THEN SET v = 1;
350  ELSEIF (v < 10) THEN SET v = 10;
351  ELSEIF (v < 11) THEN SET v = 11;
352  ELSEIF (v < 12) THEN SET v = 12;
353  ELSEIF (v < 13) THEN SET v = 13;
354  ELSEIF (v < 14) THEN SET v = 14;
355  ELSEIF (v < 15) THEN SET v = 15;
356  ELSEIF (v < 16) THEN SET v = 16;
357  ELSEIF (v < 17) THEN SET v = 17;
358  ELSEIF (v < 18) THEN SET v = 18;
359  ELSEIF (v < 19) THEN SET v = 19;
360  ELSEIF (v < 20) THEN SET v = 20;
361  ELSEIF (v < 21) THEN SET v = 21;
362  ELSEIF (v < 22) THEN SET v = 22;
363  ELSEIF (v < 23) THEN SET v = 23;
364  ELSEIF (v < 24) THEN SET v = 24;
365  ELSEIF (v < 25) THEN SET v = 25;
366  ELSEIF (v < 26) THEN SET v = 26;
367  ELSEIF (v < 27) THEN SET v = 27;
368  ELSEIF (v < 28) THEN SET v = 28;
369  ELSEIF (v < 29) THEN SET v = 29;
370  ELSEIF (v < 30) THEN SET v = 30;
371  ELSEIF (v < 31) THEN SET v = 31;
372  ELSEIF (v < 32) THEN SET v = 32;
373  ELSEIF (v < 33) THEN SET v = 33;
374  ELSEIF (v < 34) THEN SET v = 34;
375  ELSEIF (v < 35) THEN SET v = 35;
376  ELSEIF (v < 36) THEN SET v = 36;
377  ELSEIF (v < 37) THEN SET v = 37;
378  ELSEIF (v < 38) THEN SET v = 38;
379  ELSEIF (v < 39) THEN SET v = 39;
380  END IF;
381END $$
382
383delimiter ;$$
384
385drop procedure p_37228;
386
387#
388# Bug#27863 (excessive memory usage for many small queries in a multiquery
389# packet).
390#
391
392let $i=`select repeat("set @a=1;", 65535)`;
393--disable_query_log
394eval $i;
395--enable_query_log
396