]> granicus.if.org Git - php/commitdiff
- Fixed bug #44327 (PDORow::queryString property & numeric offsets / Crash)
authorFelipe Pena <felipe@php.net>
Mon, 3 Nov 2008 15:31:51 +0000 (15:31 +0000)
committerFelipe Pena <felipe@php.net>
Mon, 3 Nov 2008 15:31:51 +0000 (15:31 +0000)
ext/pdo/pdo_stmt.c
ext/pdo_mysql/tests/bug44327.phpt [new file with mode: 0644]

index 41b87baa02516ab7e6954420162777a101687c8c..3f95552f4f480e36a8ee6228af78f92fda70891a 100755 (executable)
@@ -2622,6 +2622,10 @@ static zval *row_prop_or_dim_read(zval *object, zval *member, int type TSRMLS_DC
        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);
                
        if (Z_TYPE_P(member) == IS_LONG) {
diff --git a/ext/pdo_mysql/tests/bug44327.phpt b/ext/pdo_mysql/tests/bug44327.phpt
new file mode 100644 (file)
index 0000000..1952cce
--- /dev/null
@@ -0,0 +1,64 @@
+--TEST--
+Bug #44327 (PDORow::queryString property & numeric offsets / Crash)
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+$db = MySQLPDOTest::factory();
+?>
+--FILE--
+<?php
+       require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+       $db = MySQLPDOTest::factory();
+
+       $stmt = $db->prepare("SELECT 1 AS \"one\""); 
+       $stmt->execute(); 
+       $row = $stmt->fetch(PDO::FETCH_LAZY); 
+       var_dump($row);
+       var_dump($row->{0});
+       var_dump($row->one); 
+       var_dump($row->queryString);
+
+       print "----------------------------------\n";
+
+       @$db->exec("DROP TABLE test");
+       $db->exec("CREATE TABLE test (id INT)");
+       $db->exec("INSERT INTO test(id) VALUES (1)");
+       $stmt = $db->prepare("SELECT id FROM test");
+       $stmt->execute();
+       $row = $stmt->fetch(PDO::FETCH_LAZY);
+       var_dump($row);
+       var_dump($row->queryString);
+       @$db->exec("DROP TABLE test");
+
+       print "----------------------------------\n";
+
+       $stmt = $db->prepare('foo'); 
+       @$stmt->execute();
+       $row = $stmt->fetch();
+       var_dump($row->queryString);
+       
+?>
+--EXPECTF--
+object(PDORow)#%d (2) {
+  ["queryString"]=>
+  string(17) "SELECT 1 AS "one""
+  ["one"]=>
+  string(1) "1"
+}
+string(1) "1"
+string(1) "1"
+string(17) "SELECT 1 AS "one""
+----------------------------------
+object(PDORow)#%d (2) {
+  ["queryString"]=>
+  string(19) "SELECT id FROM test"
+  ["id"]=>
+  string(1) "1"
+}
+string(19) "SELECT id FROM test"
+----------------------------------
+
+Notice: Trying to get property of non-object in %s on line %d
+NULL