From 870039d58a4d98019fb0c38f11a92085f7c509b2 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Mon, 3 Nov 2008 15:31:51 +0000 Subject: [PATCH] - Fixed bug #44327 (PDORow::queryString property & numeric offsets / Crash) --- ext/pdo/pdo_stmt.c | 4 ++ ext/pdo_mysql/tests/bug44327.phpt | 64 +++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 ext/pdo_mysql/tests/bug44327.phpt diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 41b87baa02..3f95552f4f 100755 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -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 index 0000000000..1952cce050 --- /dev/null +++ b/ext/pdo_mysql/tests/bug44327.phpt @@ -0,0 +1,64 @@ +--TEST-- +Bug #44327 (PDORow::queryString property & numeric offsets / Crash) +--SKIPIF-- + +--FILE-- +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 -- 2.40.0