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