Skip to content

Commit 9d2cdac

Browse files
committed
Merge branch 'PHP-5.4' into PHP-5.5
* PHP-5.4: fix bug #65481 (shutdown segfault due to serialize) Conflicts: ext/standard/var_unserializer.c
2 parents 69f12ad + 1ac4d8f commit 9d2cdac

File tree

4 files changed

+152
-57
lines changed

4 files changed

+152
-57
lines changed

ext/standard/php_var.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ do { \
115115

116116
PHPAPI void var_replace(php_unserialize_data_t *var_hash, zval *ozval, zval **nzval);
117117
PHPAPI void var_push_dtor(php_unserialize_data_t *var_hash, zval **val);
118+
PHPAPI void var_push_dtor_no_addref(php_unserialize_data_t *var_hashx, zval **rval);
118119
PHPAPI void var_destroy(php_unserialize_data_t *var_hash);
119120

120121
#define PHP_VAR_UNSERIALIZE_ZVAL_CHANGED(var_hash, ozval, nzval) \
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
--TEST--
2+
Bug #65481 (shutdown segfault due to serialize)
3+
--FILE--
4+
<?php
5+
echo "Test\n";
6+
7+
class A {
8+
public $e = array();
9+
}
10+
11+
class Token implements \Serializable {
12+
public function serialize()
13+
{
14+
$c = new A;
15+
16+
for ($i = 0; $i < 4; $i++)
17+
{
18+
$e = new A;
19+
$c->e[] = $e;
20+
$e->e = $c->e;
21+
}
22+
23+
return serialize(array(serialize($c)));
24+
}
25+
26+
public function unserialize($str)
27+
{
28+
$r = unserialize($str);
29+
$r = unserialize($r[0]);
30+
}
31+
}
32+
33+
$token = new Token;
34+
$token = serialize($token);
35+
36+
?>
37+
Done
38+
--EXPECT--
39+
Test
40+
Done

0 commit comments

Comments
 (0)