diff options
author | Felipe Pena <felipe@php.net> | 2008-10-10 12:10:41 +0000 |
---|---|---|
committer | Felipe Pena <felipe@php.net> | 2008-10-10 12:10:41 +0000 |
commit | 1f54af9245c35f2ffdc8c708da9c8552ecada4f8 (patch) | |
tree | 25acb551517f76cfc15feca97e6c65b9dbb2b2a7 /ext/pdo/pdo_sql_parser.c | |
parent | d77277c0e247e5d8d89d91e9a57aea8ed23d5995 (diff) | |
download | php-git-1f54af9245c35f2ffdc8c708da9c8552ecada4f8.tar.gz |
MFH:
- Fixed bug #44251 (Question mark and an escaped singel quote lead to an exception)
- Fixed bug #41125 (PDO mysql + quote() + prepare() can result in seg fault)
Patch by: tsteiner at nerdclub dot net
Diffstat (limited to 'ext/pdo/pdo_sql_parser.c')
-rw-r--r-- | ext/pdo/pdo_sql_parser.c | 82 |
1 files changed, 51 insertions, 31 deletions
diff --git a/ext/pdo/pdo_sql_parser.c b/ext/pdo/pdo_sql_parser.c index 2b97de9c53..142242f60a 100644 --- a/ext/pdo/pdo_sql_parser.c +++ b/ext/pdo/pdo_sql_parser.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.11.0 on Mon Nov 26 15:18:37 2007 */ +/* Generated by re2c 0.13.5 on Fri Oct 10 08:59:42 2008 */ #line 1 "ext/pdo/pdo_sql_parser.re" /* +----------------------------------------------------------------------+ @@ -55,9 +55,9 @@ static int scan(Scanner *s) { YYCTYPE yych; - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; - switch(yych) { + switch (yych) { case 0x00: goto yy11; case '"': goto yy2; case '\'': goto yy4; @@ -66,18 +66,19 @@ static int scan(Scanner *s) default: goto yy8; } yy2: - yych = *++YYCURSOR; - goto yy24; + yych = *(YYMARKER = ++YYCURSOR); + if (yych >= 0x01) goto yy26; yy3: #line 63 "ext/pdo/pdo_sql_parser.re" { SKIP_ONE(PDO_PARSER_TEXT); } #line 75 "ext/pdo/pdo_sql_parser.c" yy4: - yych = *++YYCURSOR; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= 0x00) goto yy3; goto yy20; yy5: yych = *++YYCURSOR; - switch(yych) { + switch (yych) { case '0': case '1': case '2': @@ -147,7 +148,7 @@ yy5: } yy6: ++YYCURSOR; - switch((yych = *YYCURSOR)) { + switch ((yych = *YYCURSOR)) { case ':': case '?': goto yy13; default: goto yy7; @@ -155,12 +156,12 @@ yy6: yy7: #line 62 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_BIND_POS); } -#line 159 "ext/pdo/pdo_sql_parser.c" +#line 160 "ext/pdo/pdo_sql_parser.c" yy8: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); + if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; - switch(yych) { + switch (yych) { case 0x00: case '"': case '\'': @@ -171,17 +172,17 @@ yy8: yy10: #line 64 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 175 "ext/pdo/pdo_sql_parser.c" +#line 176 "ext/pdo/pdo_sql_parser.c" yy11: ++YYCURSOR; #line 65 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_EOI); } -#line 180 "ext/pdo/pdo_sql_parser.c" +#line 181 "ext/pdo/pdo_sql_parser.c" yy13: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); + if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; - switch(yych) { + switch (yych) { case ':': case '?': goto yy13; default: goto yy15; @@ -189,12 +190,12 @@ yy13: yy15: #line 60 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 193 "ext/pdo/pdo_sql_parser.c" +#line 194 "ext/pdo/pdo_sql_parser.c" yy16: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); + if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; - switch(yych) { + switch (yych) { case '0': case '1': case '2': @@ -263,35 +264,54 @@ yy16: yy18: #line 61 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_BIND); } -#line 267 "ext/pdo/pdo_sql_parser.c" +#line 268 "ext/pdo/pdo_sql_parser.c" yy19: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); + if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy20: - switch(yych) { - case '\'': goto yy21; + switch (yych) { + case 0x00: goto yy21; + case '\'': goto yy23; + case '\\': goto yy22; default: goto yy19; } yy21: + YYCURSOR = YYMARKER; + goto yy3; +yy22: + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if (yych <= 0x00) goto yy21; + goto yy19; +yy23: ++YYCURSOR; #line 59 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 281 "ext/pdo/pdo_sql_parser.c" -yy23: +#line 293 "ext/pdo/pdo_sql_parser.c" +yy25: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); + if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy24: - switch(yych) { - case '"': goto yy25; - default: goto yy23; +yy26: + switch (yych) { + case 0x00: goto yy21; + case '"': goto yy28; + case '\\': goto yy27; + default: goto yy25; } -yy25: +yy27: + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if (yych <= 0x00) goto yy21; + goto yy25; +yy28: ++YYCURSOR; #line 58 "ext/pdo/pdo_sql_parser.re" { RET(PDO_PARSER_TEXT); } -#line 295 "ext/pdo/pdo_sql_parser.c" +#line 315 "ext/pdo/pdo_sql_parser.c" } #line 66 "ext/pdo/pdo_sql_parser.re" |