summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemi Collet <remi@remirepo.net>2020-09-02 10:02:38 +0200
committerRemi Collet <remi@remirepo.net>2020-09-02 10:02:38 +0200
commit27b3eca90b74939eac8b9c6b1c7ef001fa65aa6f (patch)
tree1824f15b545b508bc8ff3671835daabec42ec1be
parent3750cfe644ddb4fd2d67043319255c2e2b2356b9 (diff)
add upstream patch for test suite
add patch for PHP 8.0.0beta3 from https://github.com/igbinary/igbinary/pull/284
-rw-r--r--.gitignore2
-rw-r--r--284.patch37
-rw-r--r--igbinary-tests.patch388
-rw-r--r--php-pecl-igbinary.spec19
4 files changed, 439 insertions, 7 deletions
diff --git a/.gitignore b/.gitignore
index 1ab5c4f..01f0400 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,7 @@
+clog
package-*.xml
*.tgz
+*.tar.bz2
*.tar.gz
*.tar.xz
*.tar.xz.asc
diff --git a/284.patch b/284.patch
new file mode 100644
index 0000000..7462b9c
--- /dev/null
+++ b/284.patch
@@ -0,0 +1,37 @@
+From 46e8fa27851693877c32d0dd1239789bf2a78865 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@remirepo.net>
+Date: Wed, 2 Sep 2020 09:50:49 +0200
+Subject: [PATCH] fix for 8.0.0beta3
+
+---
+ src/php7/igbinary.c | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/src/php7/igbinary.c b/src/php7/igbinary.c
+index 992867a..d62e8dd 100644
+--- a/src/php7/igbinary.c
++++ b/src/php7/igbinary.c
+@@ -2751,7 +2751,11 @@ inline static int igbinary_unserialize_object(struct igbinary_unserialize_data *
+ break;
+ }
+ if (incomplete_class) {
++#if PHP_VERSION_ID >= 80000
++ php_store_class_name(z, class_name);
++#else
+ php_store_class_name(z, ZSTR_VAL(class_name), ZSTR_LEN(class_name));
++#endif
+ #if PHP_VERSION_ID >= 70400
+ } else {
+ if (zend_hash_str_exists(&ce->function_table, "__unserialize", sizeof("__unserialize") - 1)) {
+@@ -2802,7 +2806,11 @@ inline static int igbinary_unserialize_object(struct igbinary_unserialize_data *
+ }
+
+ if (incomplete_class) {
++#if PHP_VERSION_ID >= 80000
++ php_store_class_name(z, class_name);
++#else
+ php_store_class_name(z, ZSTR_VAL(class_name), ZSTR_LEN(class_name));
++#endif
+ }
+ struct igbinary_value_ref *ref = &IGB_REF_VAL_2(igsd, ref_n);
+ if ((flags & WANT_REF) != 0) {
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
diff --git a/php-pecl-igbinary.spec b/php-pecl-igbinary.spec
index f2f63c1..230422b 100644
--- a/php-pecl-igbinary.spec
+++ b/php-pecl-igbinary.spec
@@ -35,12 +35,15 @@ Version: %{upstream_version}%{?upstream_prever:~%{upstream_prever}}
Release: 0.12.%{gh_date}.%{gh_short}%{?dist}%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}
Source0: https://github.com/%{pecl_name}/%{pecl_name}/archive/%{gh_commit}/%{pecl_name}-%{version}-%{gh_short}.tar.gz
%else
-Release: 1%{?dist}%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}
+Release: 2%{?dist}%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}
Source0: https://pecl.php.net/get/%{pecl_name}-%{upstream_version}%{?upstream_prever}.tgz
%endif
License: BSD
URL: https://pecl.php.net/package/igbinary
+Patch0: igbinary-tests.patch
+Patch1: https://patch-diff.githubusercontent.com/raw/igbinary/igbinary/pull/284.patch
+
BuildRequires: %{?dtsprefix}gcc
BuildRequires: %{?scl_prefix}php-pear
BuildRequires: %{?scl_prefix}php-devel > 7
@@ -144,6 +147,9 @@ mv %{pecl_name}-%{upstream_version}%{?upstream_prever} NTS
%{?_licensedir:sed -e '/COPYING/s/role="doc"/role="src"/' -i package.xml}
cd NTS
+%patch0 -p1 -b .up
+%patch1 -p1 -b .pr
+
# Check version
subdir="php$(%{__php} -r 'echo (PHP_MAJOR_VERSION < 7 ? 5 : 7);')"
extver=$(sed -n '/#define PHP_IGBINARY_VERSION/{s/.* "//;s/".*$//;p}' src/$subdir/igbinary.h)
@@ -216,12 +222,6 @@ done
%check
-PHPV=$(%{__php} -r 'echo PHP_VERSION_ID;')
-if [ $PHPV -ge 80000 ] ; then
- # known failure (recursion)
- rm ?TS/tests/igbinary_{009b,026,026b}.phpt
-fi
-
MOD=""
# drop extension load from phpt
sed -e '/^extension=/d' -i ?TS/tests/*phpt
@@ -308,6 +308,11 @@ fi
%changelog
+* Wed Sep 2 2020 Remi Collet <remi@remirepo.net> - 3.1.4-2
+- add upstream patch for test suite
+- add patch for PHP 8.0.0beta3 from
+ https://github.com/igbinary/igbinary/pull/284
+
* Thu Aug 6 2020 Remi Collet <remi@remirepo.net> - 3.1.4-1
- update to 3.1.4