diff options
| author | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:37:27 -0400 |
|---|---|---|
| committer | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:37:27 -0400 |
| commit | 2d4e5b09576bb4f0ba716cc82cdf29ea04d9184b (patch) | |
| tree | 41ccc042009cba53e4ce43e727fcba4c1cfbf7f3 /ext/pdo/pdo_sql_parser.c.orig | |
| parent | d29a4fd2dd3b5d4cf6e80b602544d7b71d794e76 (diff) | |
| download | php-2d4e5b09576bb4f0ba716cc82cdf29ea04d9184b.tar.gz | |
Imported Upstream version 5.2.2upstream/5.2.2
Diffstat (limited to 'ext/pdo/pdo_sql_parser.c.orig')
| -rw-r--r-- | ext/pdo/pdo_sql_parser.c.orig | 396 |
1 files changed, 157 insertions, 239 deletions
diff --git a/ext/pdo/pdo_sql_parser.c.orig b/ext/pdo/pdo_sql_parser.c.orig index b5ca7203c..5b22830c2 100644 --- a/ext/pdo/pdo_sql_parser.c.orig +++ b/ext/pdo/pdo_sql_parser.c.orig @@ -1,10 +1,10 @@ -/* Generated by re2c 0.9.11 on Wed Jan 25 11:31:13 2006 */ +/* Generated by re2c 0.11.0 on Mon Mar 5 19:42:28 2007 */ #line 1 "ext/pdo/pdo_sql_parser.re" /* +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2006 The PHP Group | + | Copyright (c) 1997-2007 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pdo_sql_parser.c,v 1.35.2.6 2006/01/25 16:35:23 iliaa Exp $ */ +/* $Id: pdo_sql_parser.c,v 1.35.2.6.2.11 2007/03/06 00:52:55 iliaa Exp $ */ #include "php.h" #include "php_pdo_driver.h" @@ -31,14 +31,14 @@ #define RET(i) {s->cur = cursor; return i; } -#define YYCTYPE char +#define YYCTYPE unsigned char #define YYCURSOR cursor -#define YYLIMIT s->lim +#define YYLIMIT cursor #define YYMARKER s->ptr #define YYFILL(n) typedef struct Scanner { - char *lim, *ptr, *cur, *tok; + char *ptr, *cur, *tok; } Scanner; static int scan(Scanner *s) @@ -46,248 +46,147 @@ static int scan(Scanner *s) char *cursor = s->cur; s->tok = cursor; - #line 55 "ext/pdo/pdo_sql_parser.re" + #line 54 "ext/pdo/pdo_sql_parser.re" { static unsigned char yybm[] = { - 0, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 52, 162, 162, 162, 162, 196, - 162, 162, 162, 162, 162, 162, 162, 162, - 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 244, 162, 162, 162, 162, 244, - 162, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 162, 2, 162, 162, 170, - 162, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 170, 170, 170, 170, 170, - 170, 170, 170, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, - 162, 162, 162, 162, 162, 162, 162, 162, + 192, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 64, 200, 200, 200, 200, 128, + 200, 200, 200, 200, 200, 200, 200, 200, + 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 208, 200, 200, 200, 200, 208, + 200, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 200, 200, 200, 200, 232, + 200, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 200, 200, 200, }; #line 89 "ext/pdo/pdo_sql_parser.c" -{ - YYCTYPE yych; - unsigned int yyaccept = 0; - goto yy0; - ++YYCURSOR; -yy0: - if((YYLIMIT - YYCURSOR) < 3) YYFILL(3); - yych = *YYCURSOR; - if(yybm[0+yych] & 2) { - goto yy8; - } - if(yych <= 0x00) goto yy11; - if(yych <= '&') goto yy2; - if(yych <= '\'') goto yy4; - if(yych <= '>') goto yy5; - goto yy6; -yy2: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yybm[0+yych] & 64) { - goto yy30; - } - if(yych <= 0x00) goto yy3; - if(yych == '"') goto yy28; - goto yy33; + { + YYCTYPE yych; + + if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + yych = *YYCURSOR; + if(yybm[0+yych] & 8) { + goto yy8; + } + if(yych <= 0x00) goto yy11; + if(yych <= '&') goto yy2; + if(yych <= '\'') goto yy4; + if(yych <= '>') goto yy5; + goto yy6; +yy2: + yych = *++YYCURSOR; + goto yy24; yy3: -#line 63 "ext/pdo/pdo_sql_parser.re" -{ RET(PDO_PARSER_TEXT); } -#line 117 "ext/pdo/pdo_sql_parser.c" -yy4: yyaccept = 0; - yych = *(YYMARKER = ++YYCURSOR); - if(yybm[0+yych] & 16) { - goto yy19; - } - if(yych <= 0x00) goto yy3; - if(yych == '\'') goto yy21; - goto yy24; -yy5: yych = *++YYCURSOR; - if(yybm[0+yych] & 4) { - goto yy13; - } - if(yych <= 'Z'){ - if(yych <= '/') goto yy3; - if(yych <= ':') goto yy16; - if(yych <= '@') goto yy3; - goto yy16; - } else { - if(yych <= '_'){ - if(yych <= '^') goto yy3; +#line 62 "ext/pdo/pdo_sql_parser.re" + { RET(PDO_PARSER_TEXT); } +#line 109 "ext/pdo/pdo_sql_parser.c" +yy4: + yych = *++YYCURSOR; + goto yy20; +yy5: + yych = *++YYCURSOR; + if(yybm[0+yych] & 32) { goto yy16; - } else { - if(yych <= '`') goto yy3; - if(yych <= 'z') goto yy16; - goto yy3; } - } -yy6: ++YYCURSOR; - if(yybm[0+(yych = *YYCURSOR)] & 4) { + if(yych == ':') goto yy13; + if(yych == '?') goto yy13; + goto yy3; +yy6: + ++YYCURSOR; + if(yybm[0+(yych = *YYCURSOR)] & 16) { + goto yy13; + } +#line 61 "ext/pdo/pdo_sql_parser.re" + { RET(PDO_PARSER_BIND_POS); } +#line 128 "ext/pdo/pdo_sql_parser.c" +yy8: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - goto yy13; - } - goto yy7; -yy7: -#line 62 "ext/pdo/pdo_sql_parser.re" -{ RET(PDO_PARSER_BIND_POS); } -#line 154 "ext/pdo/pdo_sql_parser.c" -yy8: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy9; -yy9: if(yybm[0+yych] & 2) { - goto yy8; - } - goto yy10; -yy10: + if(yybm[0+yych] & 8) { + goto yy8; + } +#line 63 "ext/pdo/pdo_sql_parser.re" + { RET(PDO_PARSER_TEXT); } +#line 138 "ext/pdo/pdo_sql_parser.c" +yy11: + ++YYCURSOR; #line 64 "ext/pdo/pdo_sql_parser.re" -{ RET(PDO_PARSER_TEXT); } -#line 166 "ext/pdo/pdo_sql_parser.c" -yy11: ++YYCURSOR; - goto yy12; -yy12: -#line 65 "ext/pdo/pdo_sql_parser.re" -{ RET(PDO_PARSER_EOI); } -#line 172 "ext/pdo/pdo_sql_parser.c" -yy13: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy14; -yy14: if(yybm[0+yych] & 4) { - goto yy13; - } - goto yy15; -yy15: -#line 60 "ext/pdo/pdo_sql_parser.re" -{ RET(PDO_PARSER_TEXT); } -#line 184 "ext/pdo/pdo_sql_parser.c" -yy16: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy17; -yy17: if(yybm[0+yych] & 8) { - goto yy16; - } - goto yy18; -yy18: -#line 61 "ext/pdo/pdo_sql_parser.re" -{ RET(PDO_PARSER_BIND); } -#line 196 "ext/pdo/pdo_sql_parser.c" -yy19: yyaccept = 1; - YYMARKER = ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - goto yy20; -yy20: if(yybm[0+yych] & 16) { - goto yy19; - } - if(yych <= '\''){ - if(yych <= 0x00) goto yy15; - if(yych <= '&') goto yy23; - goto yy21; - } else { - if(yych == '\\') goto yy26; - goto yy23; - } -yy21: ++YYCURSOR; - if(yybm[0+(yych = *YYCURSOR)] & 4) { + { RET(PDO_PARSER_EOI); } +#line 143 "ext/pdo/pdo_sql_parser.c" +yy13: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - goto yy13; - } - goto yy22; -yy22: + if(yybm[0+yych] & 16) { + goto yy13; + } #line 59 "ext/pdo/pdo_sql_parser.re" -{ RET(PDO_PARSER_TEXT); } -#line 222 "ext/pdo/pdo_sql_parser.c" -yy23: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy24; -yy24: if(yybm[0+yych] & 32) { - goto yy23; - } - if(yych <= 0x00) goto yy25; - if(yych <= '[') goto yy27; - goto yy26; -yy25: YYCURSOR = YYMARKER; - switch(yyaccept){ - case 1: goto yy15; - case 0: goto yy3; - } -yy26: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yych == '\'') goto yy23; - goto yy25; -yy27: yych = *++YYCURSOR; - goto yy22; -yy28: ++YYCURSOR; - if(yybm[0+(yych = *YYCURSOR)] & 4) { + { RET(PDO_PARSER_TEXT); } +#line 153 "ext/pdo/pdo_sql_parser.c" +yy16: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - goto yy13; - } - goto yy29; -yy29: + if(yybm[0+yych] & 32) { + goto yy16; + } +#line 60 "ext/pdo/pdo_sql_parser.re" + { RET(PDO_PARSER_BIND); } +#line 163 "ext/pdo/pdo_sql_parser.c" +yy19: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; +yy20: + if(yybm[0+yych] & 64) { + goto yy19; + } + ++YYCURSOR; #line 58 "ext/pdo/pdo_sql_parser.re" -{ RET(PDO_PARSER_TEXT); } -#line 254 "ext/pdo/pdo_sql_parser.c" -yy30: yyaccept = 1; - YYMARKER = ++YYCURSOR; - if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); - yych = *YYCURSOR; - goto yy31; -yy31: if(yybm[0+yych] & 64) { - goto yy30; - } - if(yych <= '"'){ - if(yych <= 0x00) goto yy15; - if(yych >= '"') goto yy28; - goto yy32; - } else { - if(yych == '\\') goto yy34; - goto yy32; - } -yy32: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - goto yy33; -yy33: if(yybm[0+yych] & 128) { - goto yy32; + { RET(PDO_PARSER_TEXT); } +#line 175 "ext/pdo/pdo_sql_parser.c" +yy23: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; +yy24: + if(yybm[0+yych] & 128) { + goto yy23; + } + ++YYCURSOR; +#line 57 "ext/pdo/pdo_sql_parser.re" + { RET(PDO_PARSER_TEXT); } +#line 187 "ext/pdo/pdo_sql_parser.c" } - if(yych <= 0x00) goto yy25; - if(yych <= '[') goto yy35; - goto yy34; -yy34: ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yych == '"') goto yy32; - goto yy25; -yy35: ++YYCURSOR; - yych = *YYCURSOR; - goto yy29; -} } -#line 66 "ext/pdo/pdo_sql_parser.re" +#line 65 "ext/pdo/pdo_sql_parser.re" } @@ -317,7 +216,6 @@ PDO_API int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, int inquery_len, ptr = *outquery; s.cur = inquery; - s.lim = inquery + inquery_len; /* phase 1: look for args */ while((t = scan(&s)) != PDO_PARSER_EOI) { @@ -353,10 +251,10 @@ PDO_API int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, int inquery_len, if (query_type == (PDO_PLACEHOLDER_NAMED|PDO_PLACEHOLDER_POSITIONAL)) { /* they mixed both types; punt */ pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "mixed named and positional parameters" TSRMLS_CC); - return -1; + ret = -1; + goto clean_up; } - if (stmt->supports_placeholders == query_type && !stmt->named_rewrite_template) { /* query matches native syntax */ ret = 0; @@ -380,9 +278,27 @@ PDO_API int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, int inquery_len, ret = -1; goto clean_up; } - + + if (params && bindno != zend_hash_num_elements(params) && stmt->supports_placeholders == PDO_PLACEHOLDER_NONE) { + /* extra bit of validation for instances when same params are bound more then once */ + if (query_type != PDO_PLACEHOLDER_POSITIONAL && bindno > zend_hash_num_elements(params)) { + int ok = 1; + for (plc = placeholders; plc; plc = plc->next) { + if (zend_hash_find(params, plc->pos, plc->len, (void**) ¶m) == FAILURE) { + ok = 0; + break; + } + } + if (ok) { + goto safe; + } + } + pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "number of bound variables does not match number of tokens" TSRMLS_CC); + ret = -1; + goto clean_up; + } +safe: /* what are we going to do ? */ - if (stmt->supports_placeholders == PDO_PLACEHOLDER_NONE) { /* query generation */ @@ -416,11 +332,14 @@ PDO_API int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, int inquery_len, /* bork */ ret = -1; strcpy(stmt->error_code, stmt->dbh->error_code); - efree(buf); + if (buf) { + efree(buf); + } goto clean_up; } - efree(buf); - + if (buf) { + efree(buf); + } } else { pdo_raise_impl_error(stmt->dbh, stmt, "HY105", "Expected a stream resource" TSRMLS_CC); ret = -1; @@ -623,7 +542,6 @@ int old_pdo_parse_params(pdo_stmt_t *stmt, char *inquery, int inquery_len, char ptr = *outquery; s.cur = inquery; - s.lim = inquery + inquery_len; while((t = scan(&s)) != PDO_PARSER_EOI) { if(t == PDO_PARSER_TEXT) { memcpy(ptr, s.tok, s.cur - s.tok); |
