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