diff options
-rw-r--r-- | php-pecl-zip.spec | 5 | ||||
-rw-r--r-- | zip-php8.patch | 169 |
2 files changed, 173 insertions, 1 deletions
diff --git a/php-pecl-zip.spec b/php-pecl-zip.spec index 1b63a47..e75314e 100644 --- a/php-pecl-zip.spec +++ b/php-pecl-zip.spec @@ -35,7 +35,7 @@ Summary: A ZIP archive management extension Summary(fr): Une extension de gestion des ZIP Name: %{?scl_prefix}php-pecl-zip Version: %{upstream_version}%{?upstream_prever:~%{upstream_lower}} -Release: 6%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} +Release: 7%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} License: PHP Group: Development/Languages URL: https://pecl.php.net/package/zip @@ -272,6 +272,9 @@ fi #### TODO: SCLs on EL-8 still use libzip from default stream (7.2 => 1.5.1) %changelog +* Wed Sep 16 2020 Remi Collet <remi@remirepo.net> - 1.19.0-7 +- rebuild for 8.0.0beta4 + * Wed Sep 2 2020 Remi Collet <remi@remirepo.net> - 1.19.0-6 - rebuild for 8.0.0beta3 diff --git a/zip-php8.patch b/zip-php8.patch index 83ad3bd..67834e3 100644 --- a/zip-php8.patch +++ b/zip-php8.patch @@ -1764,3 +1764,172 @@ index 43c2da9..c1a569a 100644 } /* }}} */ +From 6e93832682dc8d86540341f5c996d56798b6b691 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= <kocsismate@woohoolabs.com> +Date: Mon, 24 Aug 2020 20:42:29 +0200 +Subject: [PATCH] Move custom type checks to ZPP + +Closes GH-6034 +--- + php8/php_zip.c | 61 ++++++++++++++++++++---------------------- + php8/php_zip.stub.php | 7 ++--- + php8/php_zip_arginfo.h | 4 +-- + 3 files changed, 33 insertions(+), 39 deletions(-) + +diff --git a/php8/php_zip.c b/php8/php_zip.c +index c1a569a..6ebbc42 100644 +--- a/php8/php_zip.c ++++ b/php8/php_zip.c +@@ -2712,16 +2712,20 @@ PHP_METHOD(ZipArchive, extractTo) + struct zip *intern; + + zval *self = ZEND_THIS; +- zval *zval_files = NULL; ++ zend_string *files_str = NULL; ++ HashTable *files_ht = NULL; ++ + zval *zval_file = NULL; + php_stream_statbuf ssb; + char *pathto; + size_t pathto_len; + int ret; + +- if (zend_parse_parameters(ZEND_NUM_ARGS(), "p|z", &pathto, &pathto_len, &zval_files) == FAILURE) { +- RETURN_THROWS(); +- } ++ ZEND_PARSE_PARAMETERS_START(1, 2) ++ Z_PARAM_PATH(pathto, pathto_len) ++ Z_PARAM_OPTIONAL ++ Z_PARAM_STR_OR_ARRAY_HT_OR_NULL(files_str, files_ht) ++ ZEND_PARSE_PARAMETERS_END(); + + ZIP_FROM_OBJECT(intern, self); + +@@ -2736,37 +2740,29 @@ PHP_METHOD(ZipArchive, extractTo) + } + } + +- if (zval_files && Z_TYPE_P(zval_files) != IS_NULL) { +- uint32_t nelems, i; ++ uint32_t nelems, i; + +- switch (Z_TYPE_P(zval_files)) { +- case IS_STRING: +- if (!php_zip_extract_file(intern, pathto, Z_STRVAL_P(zval_files), Z_STRLEN_P(zval_files))) { +- RETURN_FALSE; +- } +- break; +- case IS_ARRAY: +- nelems = zend_hash_num_elements(Z_ARRVAL_P(zval_files)); +- if (nelems == 0 ) { +- RETURN_FALSE; +- } +- for (i = 0; i < nelems; i++) { +- if ((zval_file = zend_hash_index_find(Z_ARRVAL_P(zval_files), i)) != NULL) { +- switch (Z_TYPE_P(zval_file)) { +- case IS_LONG: +- break; +- case IS_STRING: +- if (!php_zip_extract_file(intern, pathto, Z_STRVAL_P(zval_file), Z_STRLEN_P(zval_file))) { +- RETURN_FALSE; +- } +- break; ++ if (files_str) { ++ if (!php_zip_extract_file(intern, pathto, ZSTR_VAL(files_str), ZSTR_LEN(files_str))) { ++ RETURN_FALSE; ++ } ++ } else if (files_ht) { ++ nelems = zend_hash_num_elements(files_ht); ++ if (nelems == 0 ) { ++ RETURN_FALSE; ++ } ++ for (i = 0; i < nelems; i++) { ++ if ((zval_file = zend_hash_index_find(files_ht, i)) != NULL) { ++ switch (Z_TYPE_P(zval_file)) { ++ case IS_LONG: ++ break; ++ case IS_STRING: ++ if (!php_zip_extract_file(intern, pathto, Z_STRVAL_P(zval_file), Z_STRLEN_P(zval_file))) { ++ RETURN_FALSE; + } +- } ++ break; + } +- break; +- default: +- zend_argument_type_error(2, "must be of type array|string|null, %s given", zend_zval_type_name(zval_files)); +- RETURN_THROWS(); ++ } + } + } else { + /* Extract all files */ +@@ -2784,6 +2780,7 @@ PHP_METHOD(ZipArchive, extractTo) + } + } + } ++ + RETURN_TRUE; + } + /* }}} */ +diff --git a/php8/php_zip.stub.php b/php8/php_zip.stub.php +index 01f055f..cde2662 100644 +--- a/php8/php_zip.stub.php ++++ b/php8/php_zip.stub.php +@@ -161,11 +161,8 @@ public function unchangeIndex(int $index) {} + /** @return bool */ + public function unchangeName(string $name) {} + +- /** +- * @param array|string|null $files +- * @return bool +- */ +- public function extractTo(string $pathto, $files = null) {} ++ /** @return bool */ ++ public function extractTo(string $pathto, array|string|null $files = null) {} + + /** @return string|false */ + public function getFromName(string $entryname, int $len = 0, int $flags = 0) {} +diff --git a/php8/php_zip_arginfo.h b/php8/php_zip_arginfo.h +index 87222c9..c9f90d5 100644 +--- a/php8/php_zip_arginfo.h ++++ b/php8/php_zip_arginfo.h +@@ -1,5 +1,5 @@ + /* This is a generated file, edit the .stub.php file instead. +- * Stub hash: 880148896a71ad9bd076bb42c735ff1b83cd0731 */ ++ * Stub hash: 49f168c537e48f8a3998d67812a5e2e6a2463533 */ + + ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_open, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) +@@ -175,7 +175,7 @@ ZEND_END_ARG_INFO() + + ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ZipArchive_extractTo, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, pathto, IS_STRING, 0) +- ZEND_ARG_INFO_WITH_DEFAULT_VALUE(0, files, "null") ++ ZEND_ARG_TYPE_MASK(0, files, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") + ZEND_END_ARG_INFO() + + ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ZipArchive_getFromName, 0, 0, 1) +From 80a363601506de6e9038c8e794d0c797cd64b997 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= <kocsismate@woohoolabs.com> +Date: Fri, 11 Sep 2020 00:23:54 +0200 +Subject: [PATCH] Consolidate new union type ZPP macro names + +They will now follow the canonical order of types. Older macros are +left intact due to maintaining BC. +--- + php8/php_zip.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/php8/php_zip.c b/php8/php_zip.c +index 6ebbc42..96baaba 100644 +--- a/php8/php_zip.c ++++ b/php8/php_zip.c +@@ -2724,7 +2724,7 @@ PHP_METHOD(ZipArchive, extractTo) + ZEND_PARSE_PARAMETERS_START(1, 2) + Z_PARAM_PATH(pathto, pathto_len) + Z_PARAM_OPTIONAL +- Z_PARAM_STR_OR_ARRAY_HT_OR_NULL(files_str, files_ht) ++ Z_PARAM_ARRAY_HT_OR_STR_OR_NULL(files_ht, files_str) + ZEND_PARSE_PARAMETERS_END(); + + ZIP_FROM_OBJECT(intern, self); |