Skip to content

Commit db5bbe9

Browse files
committed
Merge branch 'PHP-7.0' into PHP-7.1
* PHP-7.0: Fixed memory leak (Bob)
2 parents b10de2f + 63ea4d1 commit db5bbe9

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

Zend/zend_execute.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1407,11 +1407,11 @@ static zend_never_inline void zend_pre_incdec_overloaded_property(zval *object,
14071407
zval rv;
14081408

14091409
if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
1410-
zval *z, obj;
1410+
zval *z, *zptr, obj;
14111411

14121412
ZVAL_OBJ(&obj, Z_OBJ_P(object));
14131413
Z_ADDREF(obj);
1414-
z = Z_OBJ_HT(obj)->read_property(&obj, property, BP_VAR_R, cache_slot, &rv);
1414+
zptr = z = Z_OBJ_HT(obj)->read_property(&obj, property, BP_VAR_R, cache_slot, &rv);
14151415
if (UNEXPECTED(EG(exception))) {
14161416
OBJ_RELEASE(Z_OBJ(obj));
14171417
return;
@@ -1438,7 +1438,7 @@ static zend_never_inline void zend_pre_incdec_overloaded_property(zval *object,
14381438
}
14391439
Z_OBJ_HT(obj)->write_property(&obj, property, z, cache_slot);
14401440
OBJ_RELEASE(Z_OBJ(obj));
1441-
zval_ptr_dtor(z);
1441+
zval_ptr_dtor(zptr);
14421442
} else {
14431443
zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
14441444
if (UNEXPECTED(result)) {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
--TEST--
2+
Operators on overlaoded property reference
3+
--FILE--
4+
<?php
5+
class C {
6+
function __construct() { $this->bar = str_repeat("1", 2); }
7+
function &__get($x) { return $this->bar; }
8+
function __set($x, $v) { $this->bar = $v; }
9+
}
10+
$x = new C;
11+
var_dump(++$x->foo);
12+
$x = new C;
13+
var_dump($x->foo++);
14+
$x = new C;
15+
var_dump($x->foo += 2);
16+
?>
17+
--EXPECT--
18+
int(12)
19+
string(2) "11"
20+
int(13)

0 commit comments

Comments
 (0)