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

index 01020c69a3b0dc0e3be1bd4bc41df6ccd7ec19d7..b87e545a8901f012f06fa444c065f570fe66bef7 100755 (executable)
@@ -2614,6 +2614,9 @@ 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 && strcmp(Z_STRVAL_P(member), "queryString") == 0) {
+               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