summaryrefslogtreecommitdiffstats
path: root/4.patch
diff options
context:
space:
mode:
Diffstat (limited to '4.patch')
-rw-r--r--4.patch156
1 files changed, 155 insertions, 1 deletions
diff --git a/4.patch b/4.patch
index e8acd50..c5b70ab 100644
--- a/4.patch
+++ b/4.patch
@@ -1,7 +1,7 @@
From 1225c9240e0e368dad6ccc5f618e000560b4925d Mon Sep 17 00:00:00 2001
From: Remi Collet <remi@remirepo.net>
Date: Tue, 26 Jun 2018 15:22:42 +0200
-Subject: [PATCH] relax tests for 7.3 (bool/boolean, main/count)
+Subject: [PATCH 1/2] relax tests for 7.3 (bool/boolean, main/count)
---
tests/002.phpt | 2 +-
@@ -89,3 +89,157 @@ index 39b8331..6ddd6f2 100644
int(0)
* broken file; allow broken
+
+From 5ca8d78562769fe38c0b8d1b2bcb586f18ca6dd5 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@remirepo.net>
+Date: Wed, 18 Jul 2018 11:02:14 +0200
+Subject: [PATCH 2/2] fix for iterator changes in 7.3.0alpha4
+
+---
+ rar_error.c | 2 +-
+ rararch.c | 104 ++++++++++++++++++++++++++++++++----------------------------
+ 2 files changed, 56 insertions(+), 50 deletions(-)
+
+diff --git a/rar_error.c b/rar_error.c
+index 447a19d..13a742b 100644
+--- a/rar_error.c
++++ b/rar_error.c
+@@ -252,7 +252,7 @@ void minit_rarerror(TSRMLS_D) /* {{{ */
+ rarexception_ce_ptr->ce_flags |= ZEND_ACC_FINAL;
+ zend_declare_property_bool(rarexception_ce_ptr, "usingExceptions",
+ sizeof("usingExceptions") -1, 0L /* FALSE */,
+- ZEND_ACC_PRIVATE | ZEND_ACC_STATIC TSRMLS_CC);
++ ZEND_ACC_STATIC TSRMLS_CC);
+ }
+ /* }}} */
+
+diff --git a/rararch.c b/rararch.c
+index 1c065df..06ed9ca 100644
+--- a/rararch.c
++++ b/rararch.c
+@@ -932,55 +932,6 @@ static void rararch_it_move_forward(zend_object_iterator *iter TSRMLS_DC);
+ static void rararch_it_rewind(zend_object_iterator *iter TSRMLS_DC);
+ /* }}} */
+
+-/* {{{ rararch_it_get_iterator */
+-static zend_object_iterator *rararch_it_get_iterator(zend_class_entry *ce,
+- zval *object,
+- int by_ref TSRMLS_DC)
+-{
+- rararch_iterator *it;
+- rar_file_t *rar;
+- int res;
+-
+- if (by_ref) {
+- php_error_docref(NULL TSRMLS_CC, E_ERROR,
+- "An iterator cannot be used with foreach by reference");
+- }
+-
+- it = emalloc(sizeof *it);
+-
+-#if PHP_MAJOR_VERSION < 7
+- zval_add_ref(&object);
+- it->parent.data = object;
+- it->value = NULL;
+-#else
+- zend_iterator_init((zend_object_iterator *) it);
+- ZVAL_COPY(&it->parent.data, object);
+- ZVAL_UNDEF(&it->value);
+-#endif
+-
+- it->parent.funcs = ce->iterator_funcs.funcs;
+- it->state = NULL;
+-
+- res = _rar_get_file_resource_ex(object, &rar, 1 TSRMLS_CC);
+- if (res == FAILURE)
+- php_error_docref(NULL TSRMLS_CC, E_ERROR,
+- "Cannot fetch RarArchive object");
+- if (rar->arch_handle == NULL)
+- php_error_docref(NULL TSRMLS_CC, E_ERROR,
+- "The archive is already closed, cannot give an iterator");
+- res = _rar_list_files(rar TSRMLS_CC);
+- if (_rar_handle_error(res TSRMLS_CC) == FAILURE) {
+- /* if it failed, do not expose the possibly incomplete entry list */
+- it->empty_iterator = 1;
+- }
+- else
+- it->empty_iterator = 0;
+-
+- _rar_entry_search_start(rar, RAR_SEARCH_TRAVERSE, &it->state TSRMLS_CC);
+- return (zend_object_iterator*) it;
+-}
+-/* }}} */
+-
+ /* {{{ rararch_it_invalidate_current */
+ static void rararch_it_invalidate_current(zend_object_iterator *iter TSRMLS_DC)
+ {
+@@ -1147,6 +1098,59 @@ static zend_object_iterator_funcs rararch_it_funcs = {
+ };
+ /* }}} */
+
++/* {{{ rararch_it_get_iterator */
++static zend_object_iterator *rararch_it_get_iterator(zend_class_entry *ce,
++ zval *object,
++ int by_ref TSRMLS_DC)
++{
++ rararch_iterator *it;
++ rar_file_t *rar;
++ int res;
++
++ if (by_ref) {
++ php_error_docref(NULL TSRMLS_CC, E_ERROR,
++ "An iterator cannot be used with foreach by reference");
++ }
++
++ it = emalloc(sizeof *it);
++
++#if PHP_MAJOR_VERSION < 7
++ zval_add_ref(&object);
++ it->parent.data = object;
++ it->value = NULL;
++#else
++ zend_iterator_init((zend_object_iterator *) it);
++ ZVAL_COPY(&it->parent.data, object);
++ ZVAL_UNDEF(&it->value);
++#endif
++
++#if PHP_VERSION_ID < 70300
++ it->parent.funcs = ce->iterator_funcs.funcs;
++#else
++ it->parent.funcs = &rararch_it_funcs;
++#endif
++ it->state = NULL;
++
++ res = _rar_get_file_resource_ex(object, &rar, 1 TSRMLS_CC);
++ if (res == FAILURE)
++ php_error_docref(NULL TSRMLS_CC, E_ERROR,
++ "Cannot fetch RarArchive object");
++ if (rar->arch_handle == NULL)
++ php_error_docref(NULL TSRMLS_CC, E_ERROR,
++ "The archive is already closed, cannot give an iterator");
++ res = _rar_list_files(rar TSRMLS_CC);
++ if (_rar_handle_error(res TSRMLS_CC) == FAILURE) {
++ /* if it failed, do not expose the possibly incomplete entry list */
++ it->empty_iterator = 1;
++ }
++ else
++ it->empty_iterator = 0;
++
++ _rar_entry_search_start(rar, RAR_SEARCH_TRAVERSE, &it->state TSRMLS_CC);
++ return (zend_object_iterator*) it;
++}
++/* }}} */
++
+ void minit_rararch(TSRMLS_D)
+ {
+ zend_class_entry ce;
+@@ -1170,7 +1174,9 @@ void minit_rararch(TSRMLS_D)
+ rararch_ce_ptr->clone = NULL;
+ rararch_ce_ptr->create_object = &rararch_ce_create_object;
+ rararch_ce_ptr->get_iterator = rararch_it_get_iterator;
++#if PHP_VERSION_ID < 70300
+ rararch_ce_ptr->iterator_funcs.funcs = &rararch_it_funcs;
++#endif
+ zend_class_implements(rararch_ce_ptr TSRMLS_CC, 1, zend_ce_traversable);
+ }
+