summaryrefslogtreecommitdiffstats
path: root/33.patch
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 /33.patch
parente135fbbc964385fd3787bf3b6201deae050f297a (diff)
add better patch for PHP 7.3 from https://github.com/php/pecl-file_formats-yaml/pull/33
Diffstat (limited to '33.patch')
-rw-r--r--33.patch130
1 files changed, 130 insertions, 0 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);