summaryrefslogtreecommitdiffstats
path: root/igbinary-tests.patch
diff options
context:
space:
mode:
Diffstat (limited to 'igbinary-tests.patch')
-rw-r--r--igbinary-tests.patch388
1 files changed, 388 insertions, 0 deletions
diff --git a/igbinary-tests.patch b/igbinary-tests.patch
new file mode 100644
index 0000000..8df5caa
--- /dev/null
+++ b/igbinary-tests.patch
@@ -0,0 +1,388 @@
+From: Tyson Andre <tysonandre775@hotmail.com>
+Date: Sun, 23 Aug 2020 17:35:38 -0400
+Subject: [PATCH] Update tests for php 8.0
+
+Fixes #278
+---
+ .appveyor.yml | 15 +-
+ .travis.yml | 9 +-
+ ci/run-tests-parallel.php | 486 ++++++++++++++++++++++------------
+ package.xml | 23 +-
+ src/php7/igbinary.h | 2 +-
+ tests/igbinary_009b.phpt | 3 +
+ tests/igbinary_009b_php8.phpt | 114 ++++++++
+ tests/igbinary_026.phpt | 5 +-
+ tests/igbinary_026_php8.phpt | 100 +++++++
+ tests/igbinary_026b.phpt | 3 +
+ tests/igbinary_026b_php8.phpt | 86 ++++++
+ 11 files changed, 663 insertions(+), 183 deletions(-)
+ create mode 100644 tests/igbinary_009b_php8.phpt
+ create mode 100644 tests/igbinary_026_php8.phpt
+ create mode 100644 tests/igbinary_026b_php8.phpt
+
+diff --git a/tests/igbinary_009b.phpt b/tests/igbinary_009b.phpt
+index 75fb2be..6322011 100644
+--- a/tests/igbinary_009b.phpt
++++ b/tests/igbinary_009b.phpt
+@@ -5,6 +5,9 @@ Check for reference serialization (Original example, not using var_dump)
+ if (!extension_loaded('igbinary')) {
+ echo "skip no igbinary";
+ }
++if (PHP_MAJOR_VERSION > 7) {
++ echo "skip requires php 7.x\n";
++}
+ --INI--
+ pcre.jit=0
+ --FILE--
+diff --git a/tests/igbinary_009b_php8.phpt b/tests/igbinary_009b_php8.phpt
+new file mode 100644
+index 0000000..483576a
+--- /dev/null
++++ b/tests/igbinary_009b_php8.phpt
+@@ -0,0 +1,114 @@
++--TEST--
++Check for reference serialization in php 8 (Original example, not using var_dump)
++--SKIPIF--
++<?php
++if (!extension_loaded('igbinary')) {
++ echo "skip no igbinary";
++}
++if (PHP_MAJOR_VERSION < 8) {
++ echo "skip requires php 8.0+\n";
++}
++--INI--
++pcre.jit=0
++--FILE--
++<?php
++error_reporting(E_ALL|E_STRICT);
++// Verify that $type[0] is the same zval as $type[0][0][0], but different from $type[0]
++function test_cyclic2($type, $variable) {
++ $serialized = igbinary_serialize($variable);
++ $unserialized = igbinary_unserialize($serialized);
++ echo $type, "\n";
++ echo substr(bin2hex($serialized), 8), "\n";
++ // Can't use === or == on two recursive arrays in some cases
++ echo array_keys($unserialized) === array_keys($variable) && array_keys($unserialized[0]) === array_keys($variable[0]) ? 'OK' : 'ERROR', "\n";
++ ob_start();
++ var_dump($variable);
++ $dump_exp = ob_get_clean();
++ ob_start();
++ var_dump($unserialized);
++ $dump_act = ob_get_clean();
++ if (preg_replace('/&array/', 'array', $dump_act) !== preg_replace('/&array/', 'array', $dump_exp)) {
++ echo "But var dump differs:\nActual:\n", $dump_act, "\nExpected\n", $dump_exp, "\n";
++ echo "(Was normalized)\n";
++ }
++
++ if (!isset($unserialized[0]) || count($unserialized) != 1) {
++ printf("Unexpected keys: %s\n", array_keys($unserialized));
++ return;
++ } else if (!is_array($unserialized)) {
++ printf("\$a[0] is not an array, it is %s", gettype($unserialized));
++ return;
++ }
++ // Set a key, check for the presence of the key 2 levels deeper (Should find it) and 1 level deeper (Should not find it)
++ $unserialized[0]['test'] = 'foo';
++ if ($unserialized[0][0][0]['test'] !== 'foo') {
++ echo "Expected the unserialized array to be cyclic\n";
++ }
++ if (isset($unserialized[0][0]['test'])) {
++ echo "Expected the unserialized array to be cyclic AND of cycle depth 2, but cycle depth is 1\n";
++ }
++}
++$a = [null];
++$b = [&$a];
++$a[0] = &$b;
++// 1401060025140106002514010600250101 could also be serialized as 14010600251401060014010600250101 if we normalized the references which only occurred once in the serialization
++// (Replace middle &array(&$a) with array(&$array), i.e. second 2514 with 14)
++test_cyclic2('cyclic $a = array(&array(&$a)) - testing functionality', $a);
++unset($a);
++$a = null;
++$a = [[&$a]];
++test_cyclic2('cyclic $a = array(array(&$a)); $a[0] - testing functionality', $a[0]);
++// $a serializes as 140106001401060025140106000101 - This is a bug, probably exists in php5 as well.
++--EXPECT--
++cyclic $a = array(&array(&$a)) - testing functionality
++1401060025140106002514010600250101
++OK
++But var dump differs:
++Actual:
++array(1) {
++ [0]=>
++ &array(1) {
++ [0]=>
++ array(1) {
++ [0]=>
++ *RECURSION*
++ }
++ }
++}
++
++Expected
++array(1) {
++ [0]=>
++ &array(1) {
++ [0]=>
++ *RECURSION*
++ }
++}
++
++(Was normalized)
++cyclic $a = array(array(&$a)); $a[0] - testing functionality
++14010600251401060014010600250101
++OK
++But var dump differs:
++Actual:
++array(1) {
++ [0]=>
++ &array(1) {
++ [0]=>
++ array(1) {
++ [0]=>
++ *RECURSION*
++ }
++ }
++}
++
++Expected
++array(1) {
++ [0]=>
++ &array(1) {
++ [0]=>
++ *RECURSION*
++ }
++}
++
++(Was normalized)
+\ No newline at end of file
+diff --git a/tests/igbinary_026.phpt b/tests/igbinary_026.phpt
+index 950a218..c3f4386 100644
+--- a/tests/igbinary_026.phpt
++++ b/tests/igbinary_026.phpt
+@@ -4,9 +4,12 @@ Cyclic array test
+ report_memleaks=0
+ --SKIPIF--
+ <?php
+-if(!extension_loaded('igbinary')) {
++if (!extension_loaded('igbinary')) {
+ echo "skip no igbinary";
+ }
++if (PHP_MAJOR_VERSION > 7) {
++ echo "skip requires php 7.x\n";
++}
+ --FILE--
+ <?php
+
+diff --git a/tests/igbinary_026_php8.phpt b/tests/igbinary_026_php8.phpt
+new file mode 100644
+index 0000000..91313d1
+--- /dev/null
++++ b/tests/igbinary_026_php8.phpt
+@@ -0,0 +1,100 @@
++--TEST--
++Cyclic array test
++--INI--
++report_memleaks=0
++--SKIPIF--
++<?php
++if (!extension_loaded('igbinary')) {
++ echo "skip no igbinary\n";
++}
++if (PHP_MAJOR_VERSION < 8) {
++ echo "skip requires php 8.0+\n";
++}
++--FILE--
++<?php
++
++function test($type, $variable, $test) {
++ $serialized = igbinary_serialize($variable);
++ $unserialized = igbinary_unserialize($serialized);
++
++ echo $type, "\n";
++ echo substr(bin2hex($serialized), 8), "\n";
++ echo !$test || $unserialized == $variable ? 'OK' : 'ERROR', "\n";
++}
++
++$a = array(
++ 'a' => array(
++ 'b' => 'c',
++ 'd' => 'e'
++ ),
++);
++
++$a['f'] = &$a;
++
++test('array', $a, false);
++
++$a = array("foo" => &$b);
++$b = array(1, 2, $a);
++
++$exp = $a;
++$act = igbinary_unserialize(igbinary_serialize($a));
++
++ob_start();
++var_dump($exp);
++$dump_exp = ob_get_clean();
++ob_start();
++var_dump($act);
++$dump_act = ob_get_clean();
++
++if ($dump_act !== $dump_exp) {
++ echo "Var dump differs:\nActual:\n", $dump_act, "\nExpected:\n", $dump_exp, "\n";
++} else {
++ echo "Var dump OK\n";
++}
++
++$act['foo'][1] = 'test value';
++$exp['foo'][1] = 'test value';
++if ($act['foo'][1] !== $act['foo'][2]['foo'][1]) {
++ echo "Recursive elements differ:\n";
++ echo "Actual\n";
++ var_dump($act);
++ var_dump($act['foo']);
++ echo "Expected\n";
++ var_dump($exp);
++ var_dump($exp['foo']);
++}
++
++?>
++--EXPECT--
++array
++140211016114021101621101631101641101651101662514020e0001010e05250102
++OK
++Var dump differs:
++Actual:
++array(1) {
++ ["foo"]=>
++ &array(3) {
++ [0]=>
++ int(1)
++ [1]=>
++ int(2)
++ [2]=>
++ array(1) {
++ ["foo"]=>
++ *RECURSION*
++ }
++ }
++}
++
++Expected:
++array(1) {
++ ["foo"]=>
++ &array(3) {
++ [0]=>
++ int(1)
++ [1]=>
++ int(2)
++ [2]=>
++ *RECURSION*
++ }
++}
+diff --git a/tests/igbinary_026b.phpt b/tests/igbinary_026b.phpt
+index ba17ae3..6d0ad0d 100644
+--- a/tests/igbinary_026b.phpt
++++ b/tests/igbinary_026b.phpt
+@@ -7,6 +7,9 @@ report_memleaks=0
+ if (!extension_loaded('igbinary')) {
+ echo "skip no igbinary";
+ }
++if (PHP_MAJOR_VERSION > 7) {
++ echo "skip requires php 7.x\n";
++}
+ --FILE--
+ <?php
+
+diff --git a/tests/igbinary_026b_php8.phpt b/tests/igbinary_026b_php8.phpt
+new file mode 100644
+index 0000000..b5ffa9c
+--- /dev/null
++++ b/tests/igbinary_026b_php8.phpt
+@@ -0,0 +1,86 @@
++--TEST--
++Cyclic array test 2
++--INI--
++report_memleaks=0
++--SKIPIF--
++<?php
++if (!extension_loaded('igbinary')) {
++ echo "skip no igbinary\n";
++}
++if (PHP_MAJOR_VERSION < 8) {
++ echo "skip requires php 8\n";
++}
++--FILE--
++<?php
++
++$a = array("foo" => &$b);
++$b = array(1, 2, $a);
++
++/* all three statements below should produce same output however PHP stock
++ * unserialize/serialize produces different output (5.2.16). I consider this is
++ * a PHP bug. - Oleg Grenrus
++ */
++
++/* NOTE: This is different in php 8 because igbinary_unserialize() is declared to return a reference, not a value */
++
++//$k = $a;
++//$k = unserialize(serialize($a));
++$k = igbinary_unserialize(igbinary_serialize($a));
++
++function check($a, $k) {
++ ob_start();
++ var_dump($a);
++ $a_str = ob_get_clean();
++ ob_start();
++ var_dump($k);
++ $k_str = ob_get_clean();
++
++ if ($a_str !== $k_str) {
++ echo "Output differs\n";
++ echo "Expected:\n", $a_str, "\n";
++ echo "Actual:\n", $k_str, "\n";
++ } else {
++ echo "OK\n";
++ }
++}
++
++check($a, $k);
++
++$a["foo"][2]["foo"][1] = "b";
++$k["foo"][2]["foo"][1] = "b";
++
++check($a, $k);
++
++?>
++--EXPECT--
++Output differs
++Expected:
++array(1) {
++ ["foo"]=>
++ &array(3) {
++ [0]=>
++ int(1)
++ [1]=>
++ int(2)
++ [2]=>
++ *RECURSION*
++ }
++}
++
++Actual:
++array(1) {
++ ["foo"]=>
++ &array(3) {
++ [0]=>
++ int(1)
++ [1]=>
++ int(2)
++ [2]=>
++ array(1) {
++ ["foo"]=>
++ *RECURSION*
++ }
++ }
++}
++
++OK
+\ No newline at end of file