iliaa           Tue Dec  5 18:05:57 2006 UTC

  Modified files:              
    /php-src/ext/pdo/tests      bug_36798.phpt 
    /php-src/ext/pdo    pdo_sql_parser.re pdo_sql_parser.c 
  Log:
  MFB: Fixed bug #36798 (Error parsing named parameters with queries
  containing high-ascii chars).
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/tests/bug_36798.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/pdo/tests/bug_36798.phpt
diff -u /dev/null php-src/ext/pdo/tests/bug_36798.phpt:1.2
--- /dev/null   Tue Dec  5 18:05:57 2006
+++ php-src/ext/pdo/tests/bug_36798.phpt        Tue Dec  5 18:05:56 2006
@@ -0,0 +1,32 @@
+--TEST--
+PDO Common: Bug #36798 (Error parsing named parameters with queries containing 
high-ascii chars)
+--SKIPIF--
+<?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 (id INTEGER)");
+$db->exec("INSERT INTO test (id) VALUES (1)");
+
+$stmt = $db->prepare("SELECT 'Ã' as test FROM test WHERE id = :id");
+$stmt->execute(array(":id" => 1));
+
+$row = $stmt->fetch(PDO::FETCH_NUM);
+var_dump( $row );
+
+?>
+--EXPECT--     
+array(1) {
+  [0]=>
+  string(1) "Ã"
+}
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_sql_parser.re?r1=1.36&r2=1.37&diff_format=u
Index: php-src/ext/pdo/pdo_sql_parser.re
diff -u php-src/ext/pdo/pdo_sql_parser.re:1.36 
php-src/ext/pdo/pdo_sql_parser.re:1.37
--- php-src/ext/pdo/pdo_sql_parser.re:1.36      Mon Dec  4 00:39:47 2006
+++ php-src/ext/pdo/pdo_sql_parser.re   Tue Dec  5 18:05:56 2006
@@ -16,7 +16,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_sql_parser.re,v 1.36 2006/12/04 00:39:47 iliaa Exp $ */
+/* $Id: pdo_sql_parser.re,v 1.37 2006/12/05 18:05:56 iliaa Exp $ */
 
 #include "php.h"
 #include "php_pdo_driver.h"
@@ -48,15 +48,13 @@
        BINDCHR         = [:][a-zA-Z0-9_]+;
        QUESTION        = [?];
        SPECIALS        = [:?"'];
-       ESCQQ           = [\\]["];
-       ESCQ            = [\\]['];
-       EOF                     = [\000];
+       EOF             = [\000];
        ANYNOEOF        = [\001-\377];
        */
 
        /*!re2c
-               (["] (ESCQQ|[\\]ANYNOEOF|ANYNOEOF\[\\"])* ["])          { 
RET(PDO_PARSER_TEXT); }
-               (['] (ESCQ|[\\]ANYNOEOF|ANYNOEOF\[\\'])* ['])           { 
RET(PDO_PARSER_TEXT); }
+               (["] ([^"])* ["])               { RET(PDO_PARSER_TEXT); }
+               (['] ([^'])* ['])               { RET(PDO_PARSER_TEXT); }
                SPECIALS{2,}                                                    
{ RET(PDO_PARSER_TEXT); }
                BINDCHR                                                         
        { RET(PDO_PARSER_BIND); }
                QUESTION                                                        
        { RET(PDO_PARSER_BIND_POS); }
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_sql_parser.c?r1=1.46&r2=1.47&diff_format=u
Index: php-src/ext/pdo/pdo_sql_parser.c
diff -u php-src/ext/pdo/pdo_sql_parser.c:1.46 
php-src/ext/pdo/pdo_sql_parser.c:1.47
--- php-src/ext/pdo/pdo_sql_parser.c:1.46       Mon Dec  4 00:39:47 2006
+++ php-src/ext/pdo/pdo_sql_parser.c    Tue Dec  5 18:05:56 2006
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.10.6 on Sun Dec  3 19:39:21 2006 */
+/* Generated by re2c 0.10.6 on Tue Dec  5 13:05:42 2006 */
 #line 1 "ext/pdo/pdo_sql_parser.re"
 /*
   +----------------------------------------------------------------------+
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_sql_parser.c,v 1.46 2006/12/04 00:39:47 iliaa Exp $ */
+/* $Id: pdo_sql_parser.c,v 1.47 2006/12/05 18:05:56 iliaa Exp $ */
 
 #include "php.h"
 #include "php_pdo_driver.h"
@@ -46,12 +46,12 @@
        char *cursor = s->cur;
 
        s->tok = cursor;
-       #line 55 "ext/pdo/pdo_sql_parser.re"
+       #line 53 "ext/pdo/pdo_sql_parser.re"
 
 
        {
        static unsigned char yybm[] = {
-                 0, 162, 162, 162, 162, 162, 162, 162, 
+               160, 162, 162, 162, 162, 162, 162, 162, 
                162, 162, 162, 162, 162, 162, 162, 162, 
                162, 162, 162, 162, 162, 162, 162, 162, 
                162, 162, 162, 162, 162, 162, 162, 162, 
@@ -62,7 +62,7 @@
                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, 
+               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, 
@@ -88,7 +88,6 @@
 #line 89 "ext/pdo/pdo_sql_parser.c"
        {
                YYCTYPE yych;
-               unsigned int yyaccept = 0;
 
                if((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
                yych = *YYCURSOR;
@@ -101,27 +100,23 @@
                if(yych <= '>') goto yy5;
                goto yy6;
 yy2:
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
+               yych = *++YYCURSOR;
                if(yybm[0+yych] & 64) {
-                       goto yy30;
+                       goto yy28;
                }
-               if(yych <= 0x00) goto yy3;
-               if(yych == '"') goto yy28;
-               goto yy33;
+               if(yych == '"') goto yy26;
+               goto yy30;
 yy3:
-#line 63 "ext/pdo/pdo_sql_parser.re"
+#line 61 "ext/pdo/pdo_sql_parser.re"
                { RET(PDO_PARSER_TEXT); }
-#line 116 "ext/pdo/pdo_sql_parser.c"
+#line 113 "ext/pdo/pdo_sql_parser.c"
 yy4:
-               yyaccept = 0;
-               yych = *(YYMARKER = ++YYCURSOR);
+               yych = *++YYCURSOR;
                if(yybm[0+yych] & 16) {
                        goto yy19;
                }
-               if(yych <= 0x00) goto yy3;
                if(yych == '\'') goto yy21;
-               goto yy24;
+               goto yy23;
 yy5:
                yych = *++YYCURSOR;
                if(yybm[0+yych] & 4) {
@@ -147,9 +142,9 @@
                if(yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy13;
                }
-#line 62 "ext/pdo/pdo_sql_parser.re"
+#line 60 "ext/pdo/pdo_sql_parser.re"
                { RET(PDO_PARSER_BIND_POS); }
-#line 153 "ext/pdo/pdo_sql_parser.c"
+#line 148 "ext/pdo/pdo_sql_parser.c"
 yy8:
                ++YYCURSOR;
                if(YYLIMIT == YYCURSOR) YYFILL(1);
@@ -157,14 +152,14 @@
                if(yybm[0+yych] & 2) {
                        goto yy8;
                }
-#line 64 "ext/pdo/pdo_sql_parser.re"
+#line 62 "ext/pdo/pdo_sql_parser.re"
                { RET(PDO_PARSER_TEXT); }
-#line 163 "ext/pdo/pdo_sql_parser.c"
+#line 158 "ext/pdo/pdo_sql_parser.c"
 yy11:
                ++YYCURSOR;
-#line 65 "ext/pdo/pdo_sql_parser.re"
+#line 63 "ext/pdo/pdo_sql_parser.re"
                { RET(PDO_PARSER_EOI); }
-#line 168 "ext/pdo/pdo_sql_parser.c"
+#line 163 "ext/pdo/pdo_sql_parser.c"
 yy13:
                ++YYCURSOR;
                if(YYLIMIT == YYCURSOR) YYFILL(1);
@@ -172,10 +167,9 @@
                if(yybm[0+yych] & 4) {
                        goto yy13;
                }
-yy15:
-#line 60 "ext/pdo/pdo_sql_parser.re"
+#line 58 "ext/pdo/pdo_sql_parser.re"
                { RET(PDO_PARSER_TEXT); }
-#line 179 "ext/pdo/pdo_sql_parser.c"
+#line 173 "ext/pdo/pdo_sql_parser.c"
 yy16:
                ++YYCURSOR;
                if(YYLIMIT == YYCURSOR) YYFILL(1);
@@ -183,106 +177,63 @@
                if(yybm[0+yych] & 8) {
                        goto yy16;
                }
-#line 61 "ext/pdo/pdo_sql_parser.re"
+#line 59 "ext/pdo/pdo_sql_parser.re"
                { RET(PDO_PARSER_BIND); }
-#line 189 "ext/pdo/pdo_sql_parser.c"
+#line 183 "ext/pdo/pdo_sql_parser.c"
 yy19:
-               yyaccept = 1;
-               YYMARKER = ++YYCURSOR;
                if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
                yych = *YYCURSOR;
                if(yybm[0+yych] & 16) {
                        goto yy19;
                }
-               if(yych <= '\'') {
-                       if(yych <= 0x00) goto yy15;
-                       if(yych <= '&') goto yy23;
-               } else {
-                       if(yych == '\\') goto yy26;
-                       goto yy23;
-               }
+               if(yych != '\'') goto yy23;
 yy21:
                ++YYCURSOR;
                if(yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy13;
                }
 yy22:
-#line 59 "ext/pdo/pdo_sql_parser.re"
+#line 57 "ext/pdo/pdo_sql_parser.re"
                { RET(PDO_PARSER_TEXT); }
-#line 213 "ext/pdo/pdo_sql_parser.c"
+#line 199 "ext/pdo/pdo_sql_parser.c"
 yy23:
                ++YYCURSOR;
                if(YYLIMIT == YYCURSOR) YYFILL(1);
                yych = *YYCURSOR;
-yy24:
                if(yybm[0+yych] & 32) {
                        goto yy23;
                }
-               if(yych <= 0x00) goto yy25;
-               if(yych <= '[') goto yy27;
-               goto yy26;
-yy25:
-               YYCURSOR = YYMARKER;
-               if(yyaccept <= 0) {
-                       goto yy3;
-               } else {
-                       goto yy15;
-               }
-yy26:
-               ++YYCURSOR;
-               if(YYLIMIT == YYCURSOR) YYFILL(1);
-               yych = *YYCURSOR;
-               if(yych <= 0x00) goto yy25;
-               goto yy23;
-yy27:
                yych = *++YYCURSOR;
                goto yy22;
-yy28:
+yy26:
                ++YYCURSOR;
                if(yybm[0+(yych = *YYCURSOR)] & 4) {
                        goto yy13;
                }
-yy29:
-#line 58 "ext/pdo/pdo_sql_parser.re"
+yy27:
+#line 56 "ext/pdo/pdo_sql_parser.re"
                { RET(PDO_PARSER_TEXT); }
-#line 249 "ext/pdo/pdo_sql_parser.c"
-yy30:
-               yyaccept = 1;
-               YYMARKER = ++YYCURSOR;
+#line 217 "ext/pdo/pdo_sql_parser.c"
+yy28:
                if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
                yych = *YYCURSOR;
                if(yybm[0+yych] & 64) {
-                       goto yy30;
+                       goto yy28;
                }
-               if(yych <= '"') {
-                       if(yych <= 0x00) goto yy15;
-                       if(yych >= '"') goto yy28;
-               } else {
-                       if(yych == '\\') goto yy34;
-               }
-yy32:
+               if(yych == '"') goto yy26;
+yy30:
                ++YYCURSOR;
                if(YYLIMIT == YYCURSOR) YYFILL(1);
                yych = *YYCURSOR;
-yy33:
                if(yybm[0+yych] & 128) {
-                       goto yy32;
+                       goto yy30;
                }
-               if(yych <= 0x00) goto yy25;
-               if(yych <= '[') goto yy35;
-yy34:
                ++YYCURSOR;
-               if(YYLIMIT == YYCURSOR) YYFILL(1);
                yych = *YYCURSOR;
-               if(yych <= 0x00) goto yy25;
-               goto yy32;
-yy35:
-               ++YYCURSOR;
-               yych = *YYCURSOR;
-               goto yy29;
+               goto yy27;
        }
 }
-#line 66 "ext/pdo/pdo_sql_parser.re"
+#line 64 "ext/pdo/pdo_sql_parser.re"
        
 }
 

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to