From 2befa842cd07b38716efee28b8041a24154aa42e Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Wed, 4 Jul 2018 12:24:21 +0200 Subject: add better patch for PHP 7.3 from https://github.com/php/pecl-file_formats-yaml/pull/33 --- 33.patch | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++++ php-pecl-yaml.spec | 30 ++++++++----- 2 files changed, 150 insertions(+), 10 deletions(-) create mode 100644 33.patch diff --git a/33.patch b/33.patch new file mode 100644 index 0000000..6e1f935 --- /dev/null +++ b/33.patch @@ -0,0 +1,130 @@ +From 4a3eb9f1c92e9dff6ce723bd94daef1580d080d2 Mon Sep 17 00:00:00 2001 +From: Remi Collet +Date: Wed, 4 Jul 2018 12:14:48 +0200 +Subject: [PATCH] Fix for PHP 7.3 + +--- + .gitignore | 2 ++ + .travis.yml | 3 +++ + emit.c | 53 ++++++++++++++++++++++++++++++++++++++++++----------- + 3 files changed, 47 insertions(+), 11 deletions(-) + +diff --git a/emit.c b/emit.c +index 993a666..fd3769e 100644 +--- a/emit.c ++++ b/emit.c +@@ -173,7 +173,11 @@ static void y_scan_recursion(const y_emit_state_t *state, zval *data TSRMLS_DC) + return; + } + ++#if PHP_VERSION_ID >= 70300 ++ if (!(GC_FLAGS(ht) & GC_IMMUTABLE) && GC_IS_RECURSIVE(ht)) { ++#else + if (ZEND_HASH_APPLY_PROTECTION(ht) && ht->u.v.nApplyCount > 0) { ++#endif + zval tmp; + ZVAL_LONG(&tmp, (zend_ulong) ht); + +@@ -182,17 +186,29 @@ static void y_scan_recursion(const y_emit_state_t *state, zval *data TSRMLS_DC) + return; + } + ++#if PHP_VERSION_ID >= 70300 ++ if (!(GC_FLAGS(ht) & GC_IMMUTABLE)) { ++ GC_PROTECT_RECURSION(ht); ++ } ++#else + if (ZEND_HASH_APPLY_PROTECTION(ht)) { + ht->u.v.nApplyCount++; + } ++#endif + + ZEND_HASH_FOREACH_VAL(ht, elm) { + y_scan_recursion(state, elm TSRMLS_CC); + } ZEND_HASH_FOREACH_END(); + ++#if PHP_VERSION_ID >= 70300 ++ if (!(GC_FLAGS(ht) & GC_IMMUTABLE)) { ++ GC_UNPROTECT_RECURSION(ht); ++ } ++#else + if (ZEND_HASH_APPLY_PROTECTION(ht)) { + ht->u.v.nApplyCount--; + } ++#endif + + return; + } +@@ -462,7 +478,6 @@ static int y_write_array( + zval key_zval; + zend_ulong kidx; + zend_string *kstr; +- HashTable *tmp_ht; + zend_long recursive_idx = -1; + char *anchor = { 0 }; + size_t anchor_size; +@@ -495,7 +510,11 @@ static int y_write_array( + anchor = (char*) emalloc(anchor_size + 1); + snprintf(anchor, anchor_size + 1, "refid%ld", recursive_idx + 1); + +- if (ZEND_HASH_APPLY_PROTECTION(ht) && ht->u.v.nApplyCount > 1) { ++#if PHP_VERSION_ID >= 70300 ++ if (!(GC_FLAGS(ht) & GC_IMMUTABLE) && GC_IS_RECURSIVE(ht)) { ++#else ++ if (ZEND_HASH_APPLY_PROTECTION(ht) && ht->u.v.nApplyCount > 0) { ++#endif + /* node has been visited before */ + status = yaml_alias_event_initialize( + &event, (yaml_char_t *) anchor); +@@ -536,6 +555,18 @@ static int y_write_array( + return FAILURE; + } + ++#if PHP_VERSION_ID >= 70300 ++ if (!(GC_FLAGS(ht) & GC_IMMUTABLE)) { ++ /* increment access count for hash */ ++ GC_PROTECT_RECURSION(ht); ++ } ++#else ++ if (ZEND_HASH_APPLY_PROTECTION(ht)) { ++ /* increment access count for hash */ ++ ht->u.v.nApplyCount++; ++ } ++#endif ++ + /* emit array elements */ + ZEND_HASH_FOREACH_KEY_VAL(ht, kidx, kstr, elm) { + ZVAL_DEREF(elm); +@@ -555,23 +586,23 @@ static int y_write_array( + } + } + +- tmp_ht = HASH_OF(elm); +- if (tmp_ht && ZEND_HASH_APPLY_PROTECTION(tmp_ht)) { +- /* increment access count for hash */ +- tmp_ht->u.v.nApplyCount++; +- } +- + status = y_write_zval(state, elm, NULL TSRMLS_CC); + +- if (tmp_ht && ZEND_HASH_APPLY_PROTECTION(tmp_ht)) { +- tmp_ht->u.v.nApplyCount--; +- } + + if (SUCCESS != status) { + return FAILURE; + } + } ZEND_HASH_FOREACH_END(); + ++#if PHP_VERSION_ID >= 70300 ++ if (!(GC_FLAGS(ht) & GC_IMMUTABLE)) { ++ GC_UNPROTECT_RECURSION(ht); ++ } ++#else ++ if (ZEND_HASH_APPLY_PROTECTION(ht)) { ++ ht->u.v.nApplyCount--; ++ } ++#endif + + if (Y_ARRAY_SEQUENCE == array_type) { + status = yaml_sequence_end_event_initialize(&event); diff --git a/php-pecl-yaml.spec b/php-pecl-yaml.spec index 9fe7e6e..4a9b2dd 100644 --- a/php-pecl-yaml.spec +++ b/php-pecl-yaml.spec @@ -1,6 +1,6 @@ # remirepo spec file for php-pecl-yaml # -# Copyright (c) 2012-2017 Remi Collet +# Copyright (c) 2012-2018 Remi Collet # Fedora spec file for php-pecl-yaml # @@ -22,13 +22,15 @@ Summary: PHP Bindings for yaml Name: %{?sub_prefix}php-pecl-yaml Version: 2.0.2 -Release: 1%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} +Release: 3%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} License: MIT -Group: Development/Languages URL: http://pecl.php.net/package/yaml Source: http://pecl.php.net/get/%{pecl_name}-%{version}%{?prever}.tgz +Patch0: https://patch-diff.githubusercontent.com/raw/php/pecl-file_formats-yaml/pull/33.patch + +BuildRequires: %{?dtsprefix}gcc BuildRequires: %{?scl_prefix}php-devel >= 7 BuildRequires: %{?scl_prefix}php-pear BuildRequires: libyaml-devel @@ -48,12 +50,6 @@ Provides: %{?scl_prefix}php-pecl-%{pecl_name}%{?_isa} = %{version}-%{relea %if "%{?vendor}" == "Remi Collet" && 0%{!?scl:1} && 0%{?rhel} # Other third party repo stuff -Obsoletes: php53-pecl-%{pecl_name} <= %{version} -Obsoletes: php53u-pecl-%{pecl_name} <= %{version} -Obsoletes: php54-pecl-%{pecl_name} <= %{version} -Obsoletes: php54w-pecl-%{pecl_name} <= %{version} -Obsoletes: php55u-pecl-%{pecl_name} <= %{version} -Obsoletes: php55w-pecl-%{pecl_name} <= %{version} Obsoletes: php56u-pecl-%{pecl_name} <= %{version} Obsoletes: php56w-pecl-%{pecl_name} <= %{version} Obsoletes: php70u-pecl-%{pecl_name} <= %{version} @@ -66,6 +62,10 @@ Obsoletes: php71w-pecl-%{pecl_name} <= %{version} Obsoletes: php72u-pecl-%{pecl_name} <= %{version} Obsoletes: php72w-pecl-%{pecl_name} <= %{version} %endif +%if "%{php_version}" > "7.3" +Obsoletes: php73u-pecl-%{pecl_name} <= %{version} +Obsoletes: php73w-pecl-%{pecl_name} <= %{version} +%endif %endif %if 0%{?fedora} < 20 && 0%{?rhel} < 7 @@ -94,6 +94,7 @@ sed -e 's/role="test"/role="src"/' \ -i package.xml cd NTS +%patch0 -p1 -b .pr33 # Check upstream version (often broken) extver=$(sed -n '/#define PHP_YAML_VERSION/{s/.* "//;s/".*$//;p}' php_yaml.h) @@ -207,7 +208,7 @@ REPORT_EXIT_STATUS=1 \ %endif -%if 0%{?fedora} < 24 +%if 0%{?fedora} < 24 && 0%{?rhel} < 8 # when pear installed alone, after us %triggerin -- %{?scl_prefix}php-pear if [ -x %{__pecl} ] ; then @@ -242,6 +243,15 @@ fi %changelog +* Wed Jul 4 2018 Remi Collet - 2.0.2-3 +- add better patch for PHP 7.3 from + https://github.com/php/pecl-file_formats-yaml/pull/33 + +* Tue Jul 3 2018 Remi Collet - 2.0.2-2 +- add patch for PHP 7.3 from + https://github.com/php/pecl-file_formats-yaml/pull/32 +- ignore 1 failed test with PHP 7.3 + * Tue Aug 1 2017 Remi Collet - 2.0.2-1 - Update to 2.0.2 -- cgit