mirror of
https://github.com/php/php-src.git
synced 2024-09-23 19:07:26 +00:00
MFB: Fixed bug #43130 (Bound parameters cannot have - in their name)
This commit is contained in:
parent
18215d9347
commit
38c68da824
@ -1,4 +1,4 @@
|
|||||||
/* Generated by re2c 0.11.0 on Tue Jun 5 18:56:17 2007 */
|
/* Generated by re2c 0.11.0 on Mon Oct 29 18:37:31 2007 */
|
||||||
#line 1 "ext/pdo/pdo_sql_parser.re"
|
#line 1 "ext/pdo/pdo_sql_parser.re"
|
||||||
/*
|
/*
|
||||||
+----------------------------------------------------------------------+
|
+----------------------------------------------------------------------+
|
||||||
@ -50,189 +50,309 @@ static int scan(Scanner *s)
|
|||||||
#line 54 "ext/pdo/pdo_sql_parser.re"
|
#line 54 "ext/pdo/pdo_sql_parser.re"
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
static unsigned char yybm[] = {
|
#line 55 "ext/pdo/pdo_sql_parser.c"
|
||||||
160, 162, 162, 162, 162, 162, 162, 162,
|
{
|
||||||
162, 162, 162, 162, 162, 162, 162, 162,
|
YYCTYPE yych;
|
||||||
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, 162, 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,
|
|
||||||
};
|
|
||||||
|
|
||||||
#line 90 "ext/pdo/pdo_sql_parser.c"
|
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
|
||||||
{
|
yych = *YYCURSOR;
|
||||||
YYCTYPE yych;
|
switch(yych) {
|
||||||
|
case 0x00: goto yy11;
|
||||||
if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
|
case '"': goto yy2;
|
||||||
yych = *YYCURSOR;
|
case '\'': goto yy4;
|
||||||
if(yybm[0+yych] & 2) {
|
case ':': goto yy5;
|
||||||
goto yy8;
|
case '?': goto yy6;
|
||||||
}
|
default: goto yy8;
|
||||||
if(yych <= 0x00) goto yy11;
|
}
|
||||||
if(yych <= '&') goto yy2;
|
|
||||||
if(yych <= '\'') goto yy4;
|
|
||||||
if(yych <= '>') goto yy5;
|
|
||||||
goto yy6;
|
|
||||||
yy2:
|
yy2:
|
||||||
yych = *++YYCURSOR;
|
yych = *++YYCURSOR;
|
||||||
if(yybm[0+yych] & 64) {
|
switch(yych) {
|
||||||
goto yy28;
|
case '"': goto yy26;
|
||||||
}
|
case '\'':
|
||||||
if(yych == '"') goto yy26;
|
case ':':
|
||||||
goto yy30;
|
case '?': goto yy28;
|
||||||
|
default: goto yy30;
|
||||||
|
}
|
||||||
yy3:
|
yy3:
|
||||||
#line 62 "ext/pdo/pdo_sql_parser.re"
|
#line 62 "ext/pdo/pdo_sql_parser.re"
|
||||||
{ SKIP_ONE(PDO_PARSER_TEXT); }
|
{ SKIP_ONE(PDO_PARSER_TEXT); }
|
||||||
#line 114 "ext/pdo/pdo_sql_parser.c"
|
#line 81 "ext/pdo/pdo_sql_parser.c"
|
||||||
yy4:
|
yy4:
|
||||||
yych = *++YYCURSOR;
|
yych = *++YYCURSOR;
|
||||||
if(yybm[0+yych] & 16) {
|
switch(yych) {
|
||||||
goto yy19;
|
case '"':
|
||||||
}
|
case ':':
|
||||||
if(yych == '\'') goto yy21;
|
case '?': goto yy19;
|
||||||
goto yy23;
|
case '\'': goto yy21;
|
||||||
|
default: goto yy23;
|
||||||
|
}
|
||||||
yy5:
|
yy5:
|
||||||
yych = *++YYCURSOR;
|
yych = *++YYCURSOR;
|
||||||
if(yybm[0+yych] & 4) {
|
switch(yych) {
|
||||||
goto yy13;
|
case '"':
|
||||||
}
|
case '\'':
|
||||||
if(yych <= 'Z') {
|
case ':':
|
||||||
if(yych <= '/') goto yy3;
|
case '?': goto yy13;
|
||||||
if(yych <= ':') goto yy16;
|
case '-':
|
||||||
if(yych <= '@') goto yy3;
|
case '0':
|
||||||
goto yy16;
|
case '1':
|
||||||
} else {
|
case '2':
|
||||||
if(yych <= '_') {
|
case '3':
|
||||||
if(yych <= '^') goto yy3;
|
case '4':
|
||||||
goto yy16;
|
case '5':
|
||||||
} else {
|
case '6':
|
||||||
if(yych <= '`') goto yy3;
|
case '7':
|
||||||
if(yych <= 'z') goto yy16;
|
case '8':
|
||||||
goto yy3;
|
case '9':
|
||||||
}
|
case 'A':
|
||||||
}
|
case 'B':
|
||||||
|
case 'C':
|
||||||
|
case 'D':
|
||||||
|
case 'E':
|
||||||
|
case 'F':
|
||||||
|
case 'G':
|
||||||
|
case 'H':
|
||||||
|
case 'I':
|
||||||
|
case 'J':
|
||||||
|
case 'K':
|
||||||
|
case 'L':
|
||||||
|
case 'M':
|
||||||
|
case 'N':
|
||||||
|
case 'O':
|
||||||
|
case 'P':
|
||||||
|
case 'Q':
|
||||||
|
case 'R':
|
||||||
|
case 'S':
|
||||||
|
case 'T':
|
||||||
|
case 'U':
|
||||||
|
case 'V':
|
||||||
|
case 'W':
|
||||||
|
case 'X':
|
||||||
|
case 'Y':
|
||||||
|
case 'Z':
|
||||||
|
case '_':
|
||||||
|
case 'a':
|
||||||
|
case 'b':
|
||||||
|
case 'c':
|
||||||
|
case 'd':
|
||||||
|
case 'e':
|
||||||
|
case 'f':
|
||||||
|
case 'g':
|
||||||
|
case 'h':
|
||||||
|
case 'i':
|
||||||
|
case 'j':
|
||||||
|
case 'k':
|
||||||
|
case 'l':
|
||||||
|
case 'm':
|
||||||
|
case 'n':
|
||||||
|
case 'o':
|
||||||
|
case 'p':
|
||||||
|
case 'q':
|
||||||
|
case 'r':
|
||||||
|
case 's':
|
||||||
|
case 't':
|
||||||
|
case 'u':
|
||||||
|
case 'v':
|
||||||
|
case 'w':
|
||||||
|
case 'x':
|
||||||
|
case 'y':
|
||||||
|
case 'z': goto yy16;
|
||||||
|
default: goto yy3;
|
||||||
|
}
|
||||||
yy6:
|
yy6:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
if(yybm[0+(yych = *YYCURSOR)] & 4) {
|
switch((yych = *YYCURSOR)) {
|
||||||
goto yy13;
|
case '"':
|
||||||
}
|
case '\'':
|
||||||
|
case ':':
|
||||||
|
case '?': goto yy13;
|
||||||
|
default: goto yy7;
|
||||||
|
}
|
||||||
|
yy7:
|
||||||
#line 61 "ext/pdo/pdo_sql_parser.re"
|
#line 61 "ext/pdo/pdo_sql_parser.re"
|
||||||
{ RET(PDO_PARSER_BIND_POS); }
|
{ RET(PDO_PARSER_BIND_POS); }
|
||||||
#line 149 "ext/pdo/pdo_sql_parser.c"
|
#line 176 "ext/pdo/pdo_sql_parser.c"
|
||||||
yy8:
|
yy8:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
if(yybm[0+yych] & 2) {
|
switch(yych) {
|
||||||
goto yy8;
|
case 0x00:
|
||||||
}
|
case '"':
|
||||||
|
case '\'':
|
||||||
|
case ':':
|
||||||
|
case '?': goto yy10;
|
||||||
|
default: goto yy8;
|
||||||
|
}
|
||||||
|
yy10:
|
||||||
#line 63 "ext/pdo/pdo_sql_parser.re"
|
#line 63 "ext/pdo/pdo_sql_parser.re"
|
||||||
{ RET(PDO_PARSER_TEXT); }
|
{ RET(PDO_PARSER_TEXT); }
|
||||||
#line 159 "ext/pdo/pdo_sql_parser.c"
|
#line 192 "ext/pdo/pdo_sql_parser.c"
|
||||||
yy11:
|
yy11:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
#line 64 "ext/pdo/pdo_sql_parser.re"
|
#line 64 "ext/pdo/pdo_sql_parser.re"
|
||||||
{ RET(PDO_PARSER_EOI); }
|
{ RET(PDO_PARSER_EOI); }
|
||||||
#line 164 "ext/pdo/pdo_sql_parser.c"
|
#line 197 "ext/pdo/pdo_sql_parser.c"
|
||||||
yy13:
|
yy13:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
if(yybm[0+yych] & 4) {
|
switch(yych) {
|
||||||
goto yy13;
|
case '"':
|
||||||
}
|
case '\'':
|
||||||
|
case ':':
|
||||||
|
case '?': goto yy13;
|
||||||
|
default: goto yy15;
|
||||||
|
}
|
||||||
|
yy15:
|
||||||
#line 59 "ext/pdo/pdo_sql_parser.re"
|
#line 59 "ext/pdo/pdo_sql_parser.re"
|
||||||
{ RET(PDO_PARSER_TEXT); }
|
{ RET(PDO_PARSER_TEXT); }
|
||||||
#line 174 "ext/pdo/pdo_sql_parser.c"
|
#line 212 "ext/pdo/pdo_sql_parser.c"
|
||||||
yy16:
|
yy16:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
if(yybm[0+yych] & 8) {
|
switch(yych) {
|
||||||
goto yy16;
|
case '-':
|
||||||
}
|
case '0':
|
||||||
|
case '1':
|
||||||
|
case '2':
|
||||||
|
case '3':
|
||||||
|
case '4':
|
||||||
|
case '5':
|
||||||
|
case '6':
|
||||||
|
case '7':
|
||||||
|
case '8':
|
||||||
|
case '9':
|
||||||
|
case 'A':
|
||||||
|
case 'B':
|
||||||
|
case 'C':
|
||||||
|
case 'D':
|
||||||
|
case 'E':
|
||||||
|
case 'F':
|
||||||
|
case 'G':
|
||||||
|
case 'H':
|
||||||
|
case 'I':
|
||||||
|
case 'J':
|
||||||
|
case 'K':
|
||||||
|
case 'L':
|
||||||
|
case 'M':
|
||||||
|
case 'N':
|
||||||
|
case 'O':
|
||||||
|
case 'P':
|
||||||
|
case 'Q':
|
||||||
|
case 'R':
|
||||||
|
case 'S':
|
||||||
|
case 'T':
|
||||||
|
case 'U':
|
||||||
|
case 'V':
|
||||||
|
case 'W':
|
||||||
|
case 'X':
|
||||||
|
case 'Y':
|
||||||
|
case 'Z':
|
||||||
|
case '_':
|
||||||
|
case 'a':
|
||||||
|
case 'b':
|
||||||
|
case 'c':
|
||||||
|
case 'd':
|
||||||
|
case 'e':
|
||||||
|
case 'f':
|
||||||
|
case 'g':
|
||||||
|
case 'h':
|
||||||
|
case 'i':
|
||||||
|
case 'j':
|
||||||
|
case 'k':
|
||||||
|
case 'l':
|
||||||
|
case 'm':
|
||||||
|
case 'n':
|
||||||
|
case 'o':
|
||||||
|
case 'p':
|
||||||
|
case 'q':
|
||||||
|
case 'r':
|
||||||
|
case 's':
|
||||||
|
case 't':
|
||||||
|
case 'u':
|
||||||
|
case 'v':
|
||||||
|
case 'w':
|
||||||
|
case 'x':
|
||||||
|
case 'y':
|
||||||
|
case 'z': goto yy16;
|
||||||
|
default: goto yy18;
|
||||||
|
}
|
||||||
|
yy18:
|
||||||
#line 60 "ext/pdo/pdo_sql_parser.re"
|
#line 60 "ext/pdo/pdo_sql_parser.re"
|
||||||
{ RET(PDO_PARSER_BIND); }
|
{ RET(PDO_PARSER_BIND); }
|
||||||
#line 184 "ext/pdo/pdo_sql_parser.c"
|
#line 287 "ext/pdo/pdo_sql_parser.c"
|
||||||
yy19:
|
yy19:
|
||||||
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
|
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
if(yybm[0+yych] & 16) {
|
switch(yych) {
|
||||||
goto yy19;
|
case '"':
|
||||||
}
|
case ':':
|
||||||
if(yych != '\'') goto yy23;
|
case '?': goto yy19;
|
||||||
|
case '\'': goto yy21;
|
||||||
|
default: goto yy23;
|
||||||
|
}
|
||||||
yy21:
|
yy21:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
if(yybm[0+(yych = *YYCURSOR)] & 4) {
|
switch((yych = *YYCURSOR)) {
|
||||||
goto yy13;
|
case '"':
|
||||||
}
|
case '\'':
|
||||||
|
case ':':
|
||||||
|
case '?': goto yy13;
|
||||||
|
default: goto yy22;
|
||||||
|
}
|
||||||
yy22:
|
yy22:
|
||||||
#line 58 "ext/pdo/pdo_sql_parser.re"
|
#line 58 "ext/pdo/pdo_sql_parser.re"
|
||||||
{ RET(PDO_PARSER_TEXT); }
|
{ RET(PDO_PARSER_TEXT); }
|
||||||
#line 200 "ext/pdo/pdo_sql_parser.c"
|
#line 310 "ext/pdo/pdo_sql_parser.c"
|
||||||
yy23:
|
yy23:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
if(yybm[0+yych] & 32) {
|
switch(yych) {
|
||||||
goto yy23;
|
case '\'': goto yy25;
|
||||||
}
|
default: goto yy23;
|
||||||
yych = *++YYCURSOR;
|
}
|
||||||
goto yy22;
|
yy25:
|
||||||
|
yych = *++YYCURSOR;
|
||||||
|
goto yy22;
|
||||||
yy26:
|
yy26:
|
||||||
++YYCURSOR;
|
++YYCURSOR;
|
||||||
if(yybm[0+(yych = *YYCURSOR)] & 4) {
|
switch((yych = *YYCURSOR)) {
|
||||||
goto yy13;
|
case '"':
|
||||||
}
|
case '\'':
|
||||||
|
case ':':
|
||||||
|
case '?': goto yy13;
|
||||||
|
default: goto yy27;
|
||||||
|
}
|
||||||
yy27:
|
yy27:
|
||||||
#line 57 "ext/pdo/pdo_sql_parser.re"
|
#line 57 "ext/pdo/pdo_sql_parser.re"
|
||||||
{ RET(PDO_PARSER_TEXT); }
|
{ RET(PDO_PARSER_TEXT); }
|
||||||
#line 218 "ext/pdo/pdo_sql_parser.c"
|
#line 334 "ext/pdo/pdo_sql_parser.c"
|
||||||
yy28:
|
yy28:
|
||||||
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
|
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
|
||||||
yych = *YYCURSOR;
|
yych = *YYCURSOR;
|
||||||
if(yybm[0+yych] & 64) {
|
switch(yych) {
|
||||||
goto yy28;
|
case '"': goto yy26;
|
||||||
}
|
case '\'':
|
||||||
if(yych == '"') goto yy26;
|
case ':':
|
||||||
yy30:
|
case '?': goto yy28;
|
||||||
++YYCURSOR;
|
default: goto yy30;
|
||||||
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
|
||||||
yych = *YYCURSOR;
|
|
||||||
if(yybm[0+yych] & 128) {
|
|
||||||
goto yy30;
|
|
||||||
}
|
|
||||||
++YYCURSOR;
|
|
||||||
yych = *YYCURSOR;
|
|
||||||
goto yy27;
|
|
||||||
}
|
}
|
||||||
|
yy30:
|
||||||
|
++YYCURSOR;
|
||||||
|
if(YYLIMIT == YYCURSOR) YYFILL(1);
|
||||||
|
yych = *YYCURSOR;
|
||||||
|
switch(yych) {
|
||||||
|
case '"': goto yy32;
|
||||||
|
default: goto yy30;
|
||||||
|
}
|
||||||
|
yy32:
|
||||||
|
++YYCURSOR;
|
||||||
|
yych = *YYCURSOR;
|
||||||
|
goto yy27;
|
||||||
}
|
}
|
||||||
#line 65 "ext/pdo/pdo_sql_parser.re"
|
#line 65 "ext/pdo/pdo_sql_parser.re"
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ static int scan(Scanner *s)
|
|||||||
|
|
||||||
s->tok = cursor;
|
s->tok = cursor;
|
||||||
/*!re2c
|
/*!re2c
|
||||||
BINDCHR = [:][a-zA-Z0-9_]+;
|
BINDCHR = [:][a-zA-Z0-9_-]+;
|
||||||
QUESTION = [?];
|
QUESTION = [?];
|
||||||
SPECIALS = [:?"'];
|
SPECIALS = [:?"'];
|
||||||
EOF = [\000];
|
EOF = [\000];
|
||||||
|
30
ext/pdo/tests/bug_43130.phpt
Normal file
30
ext/pdo/tests/bug_43130.phpt
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
--TEST--
|
||||||
|
PDO Common: Bug #43130 (Bound parameters cannot have - in their name)
|
||||||
|
--SKIPIF--
|
||||||
|
<?php # vim:ft=php
|
||||||
|
if (!extension_loaded('pdo')) die('skip');
|
||||||
|
$dir = getenv('REDIR_TEST_DIR');
|
||||||
|
if (false == $dir) die('skip no driver');
|
||||||
|
require_once $dir . 'pdo_test.inc';
|
||||||
|
PDOTest::skip();
|
||||||
|
?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/');
|
||||||
|
require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
|
||||||
|
$db = PDOTest::factory();
|
||||||
|
|
||||||
|
$db->exec("CREATE TABLE test (a varchar(100), b varchar(100), c varchar(100))");
|
||||||
|
|
||||||
|
for ($i = 0; $i < 5; $i++) {
|
||||||
|
$db->exec("INSERT INTO test (a,b,c) VALUES('test".$i."','".$i."','".$i."')");
|
||||||
|
}
|
||||||
|
|
||||||
|
$stmt = $db->prepare("SELECT a FROM test WHERE b=:id-value");
|
||||||
|
$stmt->bindParam(':id-value', $id);
|
||||||
|
$id = '1';
|
||||||
|
$stmt->execute();
|
||||||
|
var_dump($stmt->fetch(PDO::FETCH_COLUMN));
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
string(5) "test1"
|
Loading…
Reference in New Issue
Block a user