Skip to content

Commit 9a09541

Browse files
committed
Merge branch 'PHP-7.3'
* PHP-7.3: Fix #77298: segfault occurs when add property to unserialized empty ArrayObject
2 parents 6ccdb90 + b15189f commit 9a09541

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

ext/spl/spl_array.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1775,7 +1775,9 @@ SPL_METHOD(Array, unserialize)
17751775

17761776
if (Z_TYPE_P(array) == IS_ARRAY) {
17771777
zval_ptr_dtor(&intern->array);
1778-
ZVAL_COPY(&intern->array, array);
1778+
ZVAL_COPY_VALUE(&intern->array, array);
1779+
ZVAL_NULL(array);
1780+
SEPARATE_ARRAY(&intern->array);
17791781
} else {
17801782
spl_array_set_array(object, intern, array, 0L, 1);
17811783
}

ext/spl/tests/bug77298.phpt

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
--TEST--
2+
Bug #77298 (segfault occurs when add property to unserialized ArrayObject)
3+
--FILE--
4+
<?php
5+
$o = new ArrayObject();
6+
$o2 = unserialize(serialize($o));
7+
$o2[1]=123;
8+
var_dump($o2);
9+
10+
$o3 = new ArrayObject();
11+
$o3->unserialize($o->serialize());
12+
$o3['xm']=456;
13+
var_dump($o3);
14+
--EXPECT--
15+
object(ArrayObject)#2 (1) {
16+
["storage":"ArrayObject":private]=>
17+
array(1) {
18+
[1]=>
19+
int(123)
20+
}
21+
}
22+
object(ArrayObject)#3 (1) {
23+
["storage":"ArrayObject":private]=>
24+
array(1) {
25+
["xm"]=>
26+
int(456)
27+
}
28+
}

0 commit comments

Comments
 (0)