1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
--TEST--
Check for reference serialisation
--SKIPIF--
<?php
if(!extension_loaded('igbinary')) {
echo "skip no igbinary";
}
--FILE--
<?php
function test($type, $variable, $normalize = false) {
// Canonicalize $variable
if ($normalize) {
$variable = unserialize(serialize($variable));
}
$serialized = igbinary_serialize($variable);
$unserialized = igbinary_unserialize($serialized);
$serialize_act = serialize($unserialized);
$serialize_exp = serialize($variable);
echo $type, "\n";
echo substr(bin2hex($serialized), 8), "\n";
echo $serialize_act === $serialize_exp ? 'OK' : 'ERROR', "\n";
ob_start();
var_dump($variable);
$dump_exp = ob_get_clean();
ob_start();
var_dump($unserialized);
$dump_act = ob_get_clean();
if ($dump_act !== $dump_exp) {
echo "But var dump differs:\nActual:\n", $dump_act, "\nExpected\n", $dump_exp, "\n";
if ($normalize) {
echo "(Was normalized)\n";
}
}
if ($serialize_act !== $serialize_exp) {
echo "But serialize differs:\nActual:\n", $serialize_act, "\nExpected:\n", $serialize_exp, "\n";
}
}
$a = array('foo');
test('array($a, $a)', array($a, $a));
test('array(&$a, &$a)', array(&$a, &$a));
$a = array(null);
$b = array(&$a);
$a[0] = &$b;
test('cyclic $a = array(&array(&$a)) - normalized', $a, true);
--EXPECT--
array($a, $a)
14020600140106001103666f6f06010101
OK
array(&$a, &$a)
1402060025140106001103666f6f0601250101
OK
cyclic $a = array(&array(&$a)) - normalized
14010600251401060014010600250101
OK
|