Skip to content

Commit c3d1136

Browse files
committed
Merge branch 'PHP-8.0'
* PHP-8.0: Fixed bug #80411
2 parents de8bae4 + 217f247 commit c3d1136

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
--TEST--
2+
Bug #80411: References to null-serialized object break serialize()
3+
--FILE--
4+
<?php
5+
6+
class UnSerializable implements Serializable
7+
{
8+
public function serialize() {}
9+
public function unserialize($serialized) {}
10+
}
11+
12+
$unser = new UnSerializable();
13+
$arr = [$unser];
14+
$arr[1] = &$arr[0];
15+
$arr[2] = 'endcap';
16+
$arr[3] = &$arr[2];
17+
18+
$data = serialize($arr);
19+
echo $data . PHP_EOL;
20+
$recovered = unserialize($data);
21+
var_export($recovered);
22+
23+
?>
24+
--EXPECT--
25+
a:4:{i:0;N;i:1;N;i:2;s:6:"endcap";i:3;R:4;}
26+
array (
27+
0 => NULL,
28+
1 => NULL,
29+
2 => 'endcap',
30+
3 => 'endcap',
31+
)

ext/standard/var.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -658,7 +658,7 @@ static inline zend_long php_add_var_hash(php_serialize_data_t data, zval *var) /
658658

659659
if (zv) {
660660
/* References are only counted once, undo the data->n increment above */
661-
if (is_ref) {
661+
if (is_ref && Z_LVAL_P(zv) != -1) {
662662
data->n -= 1;
663663
}
664664

0 commit comments

Comments
 (0)