1--TEST-- 2Extra bytes unbuffered streaming unserialization 3--SKIPIF-- 4--FILE-- 5<?php 6if(!extension_loaded('msgpack')) { 7 dl('msgpack.' . PHP_SHLIB_SUFFIX); 8} 9 10function test($type, $variable, $test = null) { 11 $unpacker = new MessagePackUnpacker(); 12 13 $str = ""; 14 $offset = 0; 15 16 foreach ($variable as $var) 17 { 18 $serialized = pack('H*', $var); 19 20 $length = strlen($serialized); 21 22 for ($i = 0; $i < $length;) { 23 $len = rand(1, 10); 24 $str .= substr($serialized, $i, $len); 25 26 while (true) { 27 if ($unpacker->execute($str, $offset)) { 28 $unserialized = $unpacker->data(); 29 var_dump($unserialized); 30 31 $unpacker->reset(); 32 $str = substr($str, $offset); 33 $offset = 0; 34 } else { 35 break; 36 } 37 } 38 $i += $len; 39 } 40 } 41} 42 43test('array(1, 2, 3)', array('9301020392')); 44test('array(1, 2, 3), array(3, 9), 4', array('9301020392', '030904')); 45--EXPECTF-- 46array(3) { 47 [0]=> 48 int(1) 49 [1]=> 50 int(2) 51 [2]=> 52 int(3) 53} 54array(3) { 55 [0]=> 56 int(1) 57 [1]=> 58 int(2) 59 [2]=> 60 int(3) 61} 62array(2) { 63 [0]=> 64 int(3) 65 [1]=> 66 int(9) 67} 68int(4) 69