Skip to content

Commit a5e72fd

Browse files
committed
- MFH: Improved fix
1 parent 7fc9c9e commit a5e72fd

2 files changed

Lines changed: 41 additions & 4 deletions

File tree

ext/pdo/pdo_stmt.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2615,10 +2615,8 @@ static zval *row_prop_or_dim_read(zval *object, zval *member, int type TSRMLS_DC
26152615
pdo_stmt_t * stmt = (pdo_stmt_t *) zend_object_store_get_object(object TSRMLS_CC);
26162616
int colno = -1;
26172617

2618-
if (Z_TYPE_P(member) == IS_STRING && strcmp(Z_STRVAL_P(member), "queryString") == 0) {
2619-
return std_object_handlers.read_property(object, member, IS_STRING TSRMLS_CC);
2620-
}
26212618
MAKE_STD_ZVAL(return_value);
2619+
RETVAL_NULL();
26222620

26232621
if (Z_TYPE_P(member) == IS_LONG) {
26242622
if (Z_LVAL_P(member) >= 0 && Z_LVAL_P(member) < stmt->column_count) {
@@ -2631,9 +2629,15 @@ static zval *row_prop_or_dim_read(zval *object, zval *member, int type TSRMLS_DC
26312629
for (colno = 0; colno < stmt->column_count; colno++) {
26322630
if (strcmp(stmt->columns[colno].name, Z_STRVAL_P(member)) == 0) {
26332631
fetch_value(stmt, return_value, colno, NULL TSRMLS_CC);
2634-
break;
2632+
Z_SET_REFCOUNT_P(return_value, 0);
2633+
Z_UNSET_ISREF_P(return_value);
2634+
return return_value;
26352635
}
26362636
}
2637+
if (strcmp(Z_STRVAL_P(member), "queryString") == 0) {
2638+
zval_ptr_dtor(&return_value);
2639+
return std_object_handlers.read_property(object, member, IS_STRING TSRMLS_CC);
2640+
}
26372641
}
26382642

26392643
Z_SET_REFCOUNT_P(return_value, 0);
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
--TEST--
2+
Bug #44327.3 (PDORow::queryString property & numeric offsets / Crash)
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded('pdo_sqlite')) print 'skip not loaded';
6+
?>
7+
--FILE--
8+
<?php
9+
10+
$db = new pdo('sqlite:memory');
11+
12+
$x = $db->query('select 1 as queryStringxx');
13+
$y = $x->fetch(PDO::FETCH_LAZY);
14+
var_dump($y, $y->queryString, $y->queryStringzz, $y->queryStringxx);
15+
16+
print "---\n";
17+
18+
var_dump($y[5], $y->{3});
19+
20+
?>
21+
--EXPECTF--
22+
object(PDORow)#%d (2) {
23+
["queryString"]=>
24+
string(25) "select 1 as queryStringxx"
25+
["queryStringxx"]=>
26+
string(1) "1"
27+
}
28+
string(25) "select 1 as queryStringxx"
29+
NULL
30+
string(1) "1"
31+
---
32+
NULL
33+
NULL

0 commit comments

Comments
 (0)