summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemi Collet <remi@remirepo.net>2018-07-04 12:24:21 +0200
committerRemi Collet <remi@remirepo.net>2018-07-04 12:24:21 +0200
commit2befa842cd07b38716efee28b8041a24154aa42e (patch)
tree49b87d98e4444081dd81e1e5f0a19a86e9b10fba
parente135fbbc964385fd3787bf3b6201deae050f297a (diff)
add better patch for PHP 7.3 from https://github.com/php/pecl-file_formats-yaml/pull/33
-rw-r--r--33.patch130
-rw-r--r--php-pecl-yaml.spec30
2 files changed, 150 insertions, 10 deletions
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 <remi@remirepo.net>
+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 <remi@remirepo.net> - 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 <remi@remirepo.net> - 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 <remi@remirepo.net> - 2.0.2-1
- Update to 2.0.2