Skip to content

Commit 81230d4

Browse files
committed
tests: PHP 8 somehow detects recursion earlier
1 parent ed69aae commit 81230d4

File tree

5 files changed

+216
-8
lines changed

5 files changed

+216
-8
lines changed

package.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
<file name="007.phpt" role="test" />
7272
<file name="008.phpt" role="test" />
7373
<file name="009.phpt" role="test" />
74+
<file name="009a.phpt" role="test" />
7475
<file name="010.phpt" role="test" />
7576
<file name="012.phpt" role="test" />
7677
<file name="013.phpt" role="test" />
@@ -89,6 +90,7 @@
8990
<file name="024.phpt" role="test" />
9091
<file name="025.phpt" role="test" />
9192
<file name="026.phpt" role="test" />
93+
<file name="026a.phpt" role="test" />
9294
<file name="027.phpt" role="test" />
9395
<file name="028.phpt" role="test" />
9496
<file name="029.phpt" role="test" />

tests/009.phpt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22
Check for reference serialization
33
--SKIPIF--
44
<?php
5-
if ((version_compare(PHP_VERSION, '5.2.13') <= 0) ||
6-
(version_compare(PHP_VERSION, '5.3.0') >= 0 &&
7-
version_compare(PHP_VERSION, '5.3.2') <= 0)) {
8-
echo "skip tests in PHP 5.2.14/5.3.3 or newer";
5+
if (version_compare(PHP_VERSION, "8.0.0dev", ">=")) {
6+
die("skip PHP >= 8.0\n");
97
}
8+
?>
109
--FILE--
1110
<?php
1211
if(!extension_loaded('msgpack')) {

tests/009a.phpt

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
--TEST--
2+
Check for reference serialization
3+
--SKIPIF--
4+
<?php
5+
if (version_compare(PHP_VERSION, "8.0.0dev", "<")) {
6+
die("skip PHP < 8.0\n");
7+
}
8+
?>
9+
--FILE--
10+
<?php
11+
if(!extension_loaded('msgpack')) {
12+
dl('msgpack.' . PHP_SHLIB_SUFFIX);
13+
}
14+
15+
function test($type, $variable, $test) {
16+
$serialized = msgpack_serialize($variable);
17+
$unserialized = msgpack_unserialize($serialized);
18+
19+
echo $type, PHP_EOL;
20+
echo bin2hex($serialized), PHP_EOL;
21+
var_dump($unserialized);
22+
echo $test || $unserialized == $variable ? 'OK' : 'ERROR', PHP_EOL;
23+
}
24+
25+
$a = array('foo');
26+
27+
test('array($a, $a)', array($a, $a), false);
28+
test('array(&$a, &$a)', array(&$a, &$a), false);
29+
30+
$a = array(null);
31+
$b = array(&$a);
32+
$a[0] = &$b;
33+
34+
test('cyclic', $a, true);
35+
36+
var_dump($a);
37+
var_dump(msgpack_unserialize(msgpack_serialize($a)));
38+
39+
--EXPECT--
40+
array($a, $a)
41+
9291a3666f6f91a3666f6f
42+
array(2) {
43+
[0]=>
44+
array(1) {
45+
[0]=>
46+
string(3) "foo"
47+
}
48+
[1]=>
49+
array(1) {
50+
[0]=>
51+
string(3) "foo"
52+
}
53+
}
54+
OK
55+
array(&$a, &$a)
56+
9282c00100a3666f6f82c0020002
57+
array(2) {
58+
[0]=>
59+
&array(1) {
60+
[0]=>
61+
string(3) "foo"
62+
}
63+
[1]=>
64+
&array(1) {
65+
[0]=>
66+
string(3) "foo"
67+
}
68+
}
69+
OK
70+
cyclic
71+
9182c0010082c0010082c0020002
72+
array(1) {
73+
[0]=>
74+
&array(1) {
75+
[0]=>
76+
array(1) {
77+
[0]=>
78+
*RECURSION*
79+
}
80+
}
81+
}
82+
OK
83+
array(1) {
84+
[0]=>
85+
&array(1) {
86+
[0]=>
87+
*RECURSION*
88+
}
89+
}
90+
array(1) {
91+
[0]=>
92+
&array(1) {
93+
[0]=>
94+
array(1) {
95+
[0]=>
96+
*RECURSION*
97+
}
98+
}
99+
}

tests/026.phpt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ Cyclic array test
33
--INI--
44
--SKIPIF--
55
<?php
6-
if ((version_compare(PHP_VERSION, '5.2.13') <= 0) ||
7-
(version_compare(PHP_VERSION, '5.3.0') >= 0 &&
8-
version_compare(PHP_VERSION, '5.3.2') <= 0)) {
9-
echo "skip tests in PHP 5.2.14/5.3.3 or newer";
6+
if (version_compare(PHP_VERSION, "8.0.0dev", ">=")) {
7+
die("skip PHP >= 8.0");
108
}
9+
?>
1110
--FILE--
1211
<?php
1312
if(!extension_loaded('msgpack')) {

tests/026a.phpt

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
--TEST--
2+
Cyclic array test
3+
--INI--
4+
--SKIPIF--
5+
<?php
6+
7+
if (version_compare(PHP_VERSION, "8.0.0dev", "<")) {
8+
die("skip PHP < 8.0");
9+
}
10+
?>
11+
--FILE--
12+
<?php
13+
if(!extension_loaded('msgpack')) {
14+
dl('msgpack.' . PHP_SHLIB_SUFFIX);
15+
}
16+
17+
function test($type, $variable, $test) {
18+
$serialized = msgpack_serialize($variable);
19+
$unserialized = msgpack_unserialize($serialized);
20+
21+
echo $type, PHP_EOL;
22+
echo bin2hex($serialized), PHP_EOL;
23+
var_dump($unserialized);
24+
echo $test || $unserialized == $variable ? 'OK' : 'ERROR', PHP_EOL;
25+
}
26+
27+
$a = array(
28+
'a' => array(
29+
'b' => 'c',
30+
'd' => 'e'
31+
),
32+
);
33+
34+
$a['f'] = &$a;
35+
36+
test('array', $a, true);
37+
38+
$a = array("foo" => &$b);
39+
$b = array(1, 2, $a);
40+
var_dump($a);
41+
var_dump($k = msgpack_unserialize(msgpack_serialize($a)));
42+
43+
$k["foo"][1] = "b";
44+
var_dump($k);
45+
?>
46+
--EXPECT--
47+
array
48+
82a16182a162a163a164a165a16683c001a16182a162a163a164a165a16682c0020003
49+
array(2) {
50+
["a"]=>
51+
array(2) {
52+
["b"]=>
53+
string(1) "c"
54+
["d"]=>
55+
string(1) "e"
56+
}
57+
["f"]=>
58+
&array(2) {
59+
["a"]=>
60+
array(2) {
61+
["b"]=>
62+
string(1) "c"
63+
["d"]=>
64+
string(1) "e"
65+
}
66+
["f"]=>
67+
*RECURSION*
68+
}
69+
}
70+
OK
71+
array(1) {
72+
["foo"]=>
73+
&array(3) {
74+
[0]=>
75+
int(1)
76+
[1]=>
77+
int(2)
78+
[2]=>
79+
*RECURSION*
80+
}
81+
}
82+
array(1) {
83+
["foo"]=>
84+
&array(3) {
85+
[0]=>
86+
int(1)
87+
[1]=>
88+
int(2)
89+
[2]=>
90+
array(1) {
91+
["foo"]=>
92+
*RECURSION*
93+
}
94+
}
95+
}
96+
array(1) {
97+
["foo"]=>
98+
&array(3) {
99+
[0]=>
100+
int(1)
101+
[1]=>
102+
string(1) "b"
103+
[2]=>
104+
array(1) {
105+
["foo"]=>
106+
*RECURSION*
107+
}
108+
}
109+
}

0 commit comments

Comments
 (0)