Skip to content

Commit 5e48dff

Browse files
committed
PHPC-135: Fix memory leak var_dump()ing Query and add test
1 parent d5c721c commit 5e48dff

File tree

2 files changed

+47
-12
lines changed

2 files changed

+47
-12
lines changed

src/MongoDB/Query.c

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -120,38 +120,44 @@ zend_object_value php_phongo_query_create_object(zend_class_entry *class_type TS
120120

121121
return retval;
122122
} /* }}} */
123+
123124
HashTable *php_phongo_query_get_debug_info(zval *object, int *is_temp TSRMLS_DC) /* {{{ */
124125
{
125126
php_phongo_query_t *intern;
126-
zval *retval = NULL;
127+
zval retval = zval_used_for_init;
127128

128129

129-
*is_temp = 0;
130+
*is_temp = 1;
130131
intern = (php_phongo_query_t *)zend_object_store_get_object(object TSRMLS_CC);
131132

132-
MAKE_STD_ZVAL(retval);
133-
array_init(retval);
133+
array_init_size(&retval, 6);
134134

135135
if (intern->query) {
136136
php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER;
137137

138138
MAKE_STD_ZVAL(state.zchild);
139139
bson_to_zval(bson_get_data(intern->query), intern->query->len, &state);
140-
add_assoc_zval_ex(retval, ZEND_STRS("query"), state.zchild);
140+
add_assoc_zval_ex(&retval, ZEND_STRS("query"), state.zchild);
141+
} else {
142+
add_assoc_null_ex(&retval, ZEND_STRS("query"));
141143
}
144+
142145
if (intern->selector) {
143146
php_phongo_bson_state state = PHONGO_BSON_STATE_INITIALIZER;
144147

145148
MAKE_STD_ZVAL(state.zchild);
146149
bson_to_zval(bson_get_data(intern->selector), intern->selector->len, &state);
147-
add_assoc_zval_ex(retval, ZEND_STRS("selector"), state.zchild);
150+
add_assoc_zval_ex(&retval, ZEND_STRS("selector"), state.zchild);
151+
} else {
152+
add_assoc_null_ex(&retval, ZEND_STRS("selector"));
148153
}
149-
add_assoc_long_ex(retval, ZEND_STRS("flags"), intern->flags);
150-
add_assoc_long_ex(retval, ZEND_STRS("skip"), intern->skip);
151-
add_assoc_long_ex(retval, ZEND_STRS("limit"), intern->limit);
152-
add_assoc_long_ex(retval, ZEND_STRS("batch_size"), intern->batch_size);
153154

154-
return Z_ARRVAL_P(retval);
155+
add_assoc_long_ex(&retval, ZEND_STRS("flags"), intern->flags);
156+
add_assoc_long_ex(&retval, ZEND_STRS("skip"), intern->skip);
157+
add_assoc_long_ex(&retval, ZEND_STRS("limit"), intern->limit);
158+
add_assoc_long_ex(&retval, ZEND_STRS("batch_size"), intern->batch_size);
159+
160+
return Z_ARRVAL(retval);
155161

156162
} /* }}} */
157163
/* }}} */

tests/functional/query-sort-003.phpt

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ $query = new MongoDB\Driver\Query(array(), array(
1515
));
1616

1717
$qr = $manager->executeQuery(NS, $query);
18+
var_dump($query);
1819

1920
$cursor = $qr->getIterator();
2021
var_dump(get_class($qr), get_class($cursor));
@@ -26,7 +27,35 @@ foreach ($cursor as $document) {
2627
?>
2728
===DONE===
2829
<?php exit(0); ?>
29-
--EXPECT--
30+
--EXPECTF--
31+
object(MongoDB\Driver\Query)#%d (6) {
32+
["query"]=>
33+
array(2) {
34+
["$orderby"]=>
35+
object(stdClass)#%d (1) {
36+
["username"]=>
37+
int(1)
38+
}
39+
["$query"]=>
40+
object(stdClass)#%d (0) {
41+
}
42+
}
43+
["selector"]=>
44+
array(2) {
45+
["_id"]=>
46+
int(0)
47+
["username"]=>
48+
int(1)
49+
}
50+
["flags"]=>
51+
int(0)
52+
["skip"]=>
53+
int(0)
54+
["limit"]=>
55+
int(0)
56+
["batch_size"]=>
57+
int(0)
58+
}
3059
string(26) "MongoDB\Driver\QueryResult"
3160
string(21) "MongoDB\Driver\Cursor"
3261
abernathy.audrey

0 commit comments

Comments
 (0)