felipe          Mon Nov  3 23:43:51 2008 UTC

  Added files:                 
    /php-src/ext/pdo_sqlite/tests       bug44327_3.phpt 

  Modified files:              
    /php-src/ext/pdo    pdo_stmt.c 
  Log:
  - Improved fix
  
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.206&r2=1.207&diff_format=u
Index: php-src/ext/pdo/pdo_stmt.c
diff -u php-src/ext/pdo/pdo_stmt.c:1.206 php-src/ext/pdo/pdo_stmt.c:1.207
--- php-src/ext/pdo/pdo_stmt.c:1.206    Mon Nov  3 20:45:43 2008
+++ php-src/ext/pdo/pdo_stmt.c  Mon Nov  3 23:43:51 2008
@@ -18,7 +18,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: pdo_stmt.c,v 1.206 2008/11/03 20:45:43 felipe Exp $ */
+/* $Id: pdo_stmt.c,v 1.207 2008/11/03 23:43:51 felipe Exp $ */
 
 /* The PDO Statement Handle Class */
 
@@ -2623,11 +2623,8 @@
        pdo_stmt_t * stmt = (pdo_stmt_t *) zend_object_store_get_object(object 
TSRMLS_CC);
        int colno = -1;
 
-       if ((Z_TYPE_P(member) == IS_STRING || Z_TYPE_P(member) == IS_UNICODE) &&
-               memcmp(Z_UNIVAL_P(member).v, "queryString", 
sizeof("queryString")-1)) {
-               return std_object_handlers.read_property(object, member, 
IS_STRING TSRMLS_CC);
-       }
        MAKE_STD_ZVAL(return_value);
+       RETVAL_NULL();
                
        if (Z_TYPE_P(member) == IS_LONG) {
                if (Z_LVAL_P(member) >= 0 && Z_LVAL_P(member) < 
stmt->column_count) {
@@ -2640,9 +2637,14 @@
                for (colno = 0; colno < stmt->column_count; colno++) {
                        if (strcmp(stmt->columns[colno].name, 
Z_STRVAL_P(member)) == 0) {
                                fetch_value(stmt, return_value, colno, NULL 
TSRMLS_CC);
-                               break;
+                               Z_SET_REFCOUNT_P(return_value, 0);
+                               Z_UNSET_ISREF_P(return_value);
+                               return return_value;
                        }
                }
+               if (strcmp(Z_STRVAL_P(member), "queryString") == 0) {
+                       return std_object_handlers.read_property(object, 
member, IS_STRING TSRMLS_CC);
+               }
        }
 
        Z_SET_REFCOUNT_P(return_value, 0);

http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_sqlite/tests/bug44327_3.phpt?view=markup&rev=1.1
Index: php-src/ext/pdo_sqlite/tests/bug44327_3.phpt
+++ php-src/ext/pdo_sqlite/tests/bug44327_3.phpt
--TEST--
Bug #44327.3 (PDORow::queryString property & numeric offsets / Crash)
--SKIPIF--
<?php
if (!extension_loaded('pdo_sqlite')) print 'skip not loaded';
?>
--FILE--
<?php

$db = new pdo('sqlite:memory');

$x = $db->query('select 1 as queryStringxx');
$y = $x->fetch(PDO::FETCH_LAZY);
var_dump($y, $y->queryString, $y->queryStringzz, $y->queryStringxx);

print "---\n";

var_dump($y[5], $y->{3});

?>
--EXPECTF--
object(PDORow)#%d (2) {
  ["queryString"]=>
  string(25) "select 1 as queryStringxx"
  ["queryStringxx"]=>
  string(1) "1"
}
string(25) "select 1 as queryStringxx"
NULL
string(1) "1"
---
NULL
NULL



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

Reply via email to