...
 
Commits (2)
php-yaml (2.0.2+1.3.1-3) unstable; urgency=medium
* Add patches for PHP 7.3 (Courtesy of Remi Collet)
-- Ondřej Surý <ondrej@debian.org> Wed, 03 Oct 2018 07:47:02 +0000
php-yaml (2.0.2+1.3.1-2) unstable; urgency=medium
* Update Vcs-* to salsa.d.o
......
From: Remi Collet <remi@remirepo.net>
Date: Wed, 4 Jul 2018 12:14:48 +0200
Subject: Fix for PHP 7.3
---
yaml-2.0.2/emit.c | 53 ++++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 42 insertions(+), 11 deletions(-)
diff --git a/yaml-2.0.2/emit.c b/yaml-2.0.2/emit.c
index 993a666..fd3769e 100644
--- a/yaml-2.0.2/emit.c
+++ b/yaml-2.0.2/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);