1--TEST--
2broken random data test
3--SKIPIF--
4<?php
5if(!extension_loaded('msgpack')) {
6    die("skip");
7}
8if (version_compare(PHP_VERSION, "7.1", ">=")) {
9    die("skip PHP >= 7.1");
10}
11?>
12--FILE--
13<?php
14
15error_reporting(E_ERROR | E_PARSE);
16
17function test() {
18    $serialized = msgpack_serialize(null);
19    $serialized = substr($serialized, 0, -1);
20
21    $length = mt_rand(1, 255);
22    for ($i = 0; $i < $length; ++$i) {
23        $serialized .= chr(mt_rand(0, 255));
24    }
25
26    // if returned null everything is OK
27    if (($unserialized = msgpack_unserialize($serialized)) === null) {
28        return true;
29    }
30
31    // whole data is read?
32    if ($serialized !== msgpack_serialize($unserialized)) {
33        return true;
34    }
35
36    echo bin2hex($serialized), "\n";
37    var_dump($unserialized);
38
39    return false;
40}
41
42mt_srand(0x4c05b583);
43for ($i = 0; $i < 100; ++$i) {
44    if (!test()) break;
45}
46
47?>
48--EXPECT--
49