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