Skip to content

Commit 1ac4d8f

Browse files
committed
fix bug #65481 (shutdown segfault due to serialize)
1 parent aa7d3d8 commit 1ac4d8f

File tree

5 files changed

+154
-58
lines changed

5 files changed

+154
-58
lines changed

NEWS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ PHP NEWS
33
?? ??? 2013, PHP 5.4.19
44

55
- Core:
6+
. Fixed bug #65481 (shutdown segfault due to serialize) (Mike)
67
. Fixed bug #65470 (Segmentation fault in zend_error() with
78
--enable-dtrace). (Chris Jones)
89
. Fixed bug #65372 (Segfault in gc_zval_possible_root when return reference

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)