1--TEST--
2broken random data test : MessagePackUnpacker::execute
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    $unpacker = new MessagePackUnpacker();
28    if ($unpacker->execute($serialized, $offset))
29    {
30        if (($unserialized = $unpacker->data()) === null) {
31            return true;
32        }
33        $unpacker->reset();
34    }
35    else
36    {
37        return true;
38    }
39
40    // whole data is read?
41    if ($serialized !== msgpack_serialize($unserialized)) {
42        return true;
43    }
44
45    echo bin2hex($serialized), "\n";
46    var_dump($unserialized);
47
48    return false;
49}
50
51mt_srand(0x4c05b583);
52for ($i = 0; $i < 100; ++$i) {
53    if (!test()) break;
54}
55
56?>
57--EXPECT--
58