mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
parameter of my_yyoverflow made independed from YYSIZE_T (BUG#4204)
mysql-test/r/union.result: test of correct parser stack overflow handling mysql-test/t/union.test: test of correct parser stack overflow handling sql/sql_parse.cc: parameter of my_yyoverflow made independed from YYSIZE_T sql/sql_yacc.yy: parameter of my_yyoverflow made independed from YYSIZE_T
This commit is contained in:
parent
d82af3ae76
commit
a616e1decb
4 changed files with 64 additions and 4 deletions
|
@ -960,3 +960,31 @@ a
|
||||||
a
|
a
|
||||||
150
|
150
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 ( ID1 int(10) unsigned NOT NULL DEFAULT '0' , ID2 datetime NOT NULL DEFAULT '0000-00-00 00:00:00' , DATA1 varchar(10) , DATA2 double(5,4) , DATA3 datetime , PRIMARY KEY (ID1,ID2));
|
||||||
|
CREATE TABLE t2 ( ID int(3) unsigned NOT NULL DEFAULT '0' , DATA1 timestamp DEFAULT '0000-00-00 00:00:00' , PRIMARY KEY (ID));
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1);
|
||||||
|
ID1 ID2 DATA1 DATA2 DATA3 ID DATA1
|
||||||
|
drop table t1,t2;
|
||||||
|
|
|
@ -535,3 +535,35 @@ CREATE TABLE t1 (uid int(1));
|
||||||
INSERT INTO t1 SELECT 150;
|
INSERT INTO t1 SELECT 150;
|
||||||
SELECT 'a' UNION SELECT uid FROM t1;
|
SELECT 'a' UNION SELECT uid FROM t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# parser stack overflow
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 ( ID1 int(10) unsigned NOT NULL DEFAULT '0' , ID2 datetime NOT NULL DEFAULT '0000-00-00 00:00:00' , DATA1 varchar(10) , DATA2 double(5,4) , DATA3 datetime , PRIMARY KEY (ID1,ID2));
|
||||||
|
|
||||||
|
CREATE TABLE t2 ( ID int(3) unsigned NOT NULL DEFAULT '0' , DATA1 timestamp DEFAULT '0000-00-00 00:00:00' , PRIMARY KEY (ID));
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1) UNION
|
||||||
|
(SELECT * FROM t1 AS PARTITIONED, t2 AS
|
||||||
|
PARTITIONED_B WHERE PARTITIONED_B.ID=PARTITIONED.ID1);
|
||||||
|
drop table t1,t2;
|
||||||
|
|
|
@ -3816,10 +3816,10 @@ bool check_stack_overrun(THD *thd,char *buf __attribute__((unused)))
|
||||||
#define MY_YACC_INIT 1000 // Start with big alloc
|
#define MY_YACC_INIT 1000 // Start with big alloc
|
||||||
#define MY_YACC_MAX 32000 // Because of 'short'
|
#define MY_YACC_MAX 32000 // Because of 'short'
|
||||||
|
|
||||||
bool my_yyoverflow(short **yyss, YYSTYPE **yyvs, int *yystacksize)
|
bool my_yyoverflow(short **yyss, YYSTYPE **yyvs, ulong *yystacksize)
|
||||||
{
|
{
|
||||||
LEX *lex=current_lex;
|
LEX *lex=current_lex;
|
||||||
int old_info=0;
|
ulong old_info=0;
|
||||||
if ((uint) *yystacksize >= MY_YACC_MAX)
|
if ((uint) *yystacksize >= MY_YACC_MAX)
|
||||||
return 1;
|
return 1;
|
||||||
if (!lex->yacc_yyvs)
|
if (!lex->yacc_yyvs)
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
|
|
||||||
int yylex(void *yylval, void *yythd);
|
int yylex(void *yylval, void *yythd);
|
||||||
|
|
||||||
#define yyoverflow(A,B,C,D,E,F) if (my_yyoverflow((B),(D),(int*) (F))) { yyerror((char*) (A)); return 2; }
|
#define yyoverflow(A,B,C,D,E,F) {ulong val= *(F); if(my_yyoverflow((B), (D), &val)) { yyerror((char*) (A)); return 2; } else { *(F)= (YYSIZE_T)val; }}
|
||||||
|
|
||||||
#define WARN_DEPRECATED(A,B) \
|
#define WARN_DEPRECATED(A,B) \
|
||||||
push_warning_printf(((THD *)yythd), MYSQL_ERROR::WARN_LEVEL_WARN, \
|
push_warning_printf(((THD *)yythd), MYSQL_ERROR::WARN_LEVEL_WARN, \
|
||||||
|
@ -90,7 +90,7 @@ inline Item *or_or_concat(THD *thd, Item* A, Item* B)
|
||||||
}
|
}
|
||||||
|
|
||||||
%{
|
%{
|
||||||
bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
|
bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%pure_parser /* We have threads */
|
%pure_parser /* We have threads */
|
||||||
|
|
Loading…
Reference in a new issue