summaryrefslogtreecommitdiff
path: root/ext/pdo/pdo_sql_parser.c.orig
diff options
context:
space:
mode:
authorMark A. Hershberger <mah@debian.(none)>2009-03-25 00:37:27 -0400
committerMark A. Hershberger <mah@debian.(none)>2009-03-25 00:37:27 -0400
commit2d4e5b09576bb4f0ba716cc82cdf29ea04d9184b (patch)
tree41ccc042009cba53e4ce43e727fcba4c1cfbf7f3 /ext/pdo/pdo_sql_parser.c.orig
parentd29a4fd2dd3b5d4cf6e80b602544d7b71d794e76 (diff)
downloadphp-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.orig396
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**) &param) == 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);