summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--php-pecl-zip.spec11
-rw-r--r--zip-php8.patch1102
2 files changed, 1097 insertions, 16 deletions
diff --git a/php-pecl-zip.spec b/php-pecl-zip.spec
index fab3678..7c8614a 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: 2%{?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: PHP
Group: Development/Languages
URL: https://pecl.php.net/package/zip
@@ -66,7 +66,7 @@ Provides: %{?scl_prefix}php-pecl(%{pecl_name})%{?_isa} = %{version}
Provides: %{?scl_prefix}php-%{pecl_name} = 1:%{version}-%{release}
Provides: %{?scl_prefix}php-%{pecl_name}%{?_isa} = 1:%{version}-%{release}
-%if "%{?vendor}" == "Remi Collet" && 0%{!?scl:1} && 0%{?rhel}
+%if "%{?packager}" == "Remi Collet" && 0%{!?scl:1} && 0%{?rhel}
# Other third party repo stuff
Obsoletes: php53-pecl-%{pecl_name} <= %{version}
Obsoletes: php53u-pecl-%{pecl_name} <= %{version}
@@ -100,6 +100,9 @@ Obsoletes: php73w-pecl-%{pecl_name} <= %{version}
Obsoletes: php74-pecl-%{pecl_name} <= %{version}
Obsoletes: php74w-pecl-%{pecl_name} <= %{version}
%endif
+%if "%{php_version}" > "8.0"
+Obsoletes: php80-pecl-%{pecl_name} <= %{version}
+%endif
%endif
%if "%{php_version}" > "7.0"
@@ -268,6 +271,10 @@ fi
#### TODO: SCLs on EL-8 still use libzip from default stream (7.2 => 1.5.1)
%changelog
+* Wed Jul 22 2020 Remi Collet <remi@remirepo.net> - 1.19.0-3
+- more change for PHP 8.0
+- procedural API is deprecated
+
* Fri Jun 5 2020 Remi Collet <remi@remirepo.net> - 1.19.0-2
- fix encode parameter is option
diff --git a/zip-php8.patch b/zip-php8.patch
index 45e9940..95b4e4c 100644
--- a/zip-php8.patch
+++ b/zip-php8.patch
@@ -1,18 +1,823 @@
-From a6154ce1512755b061848bc1e549118279765dc1 Mon Sep 17 00:00:00 2001
-From: Remi Collet <remi@remirepo.net>
-Date: Fri, 5 Jun 2020 17:08:21 +0200
-Subject: [PATCH] encode param is optional
-
----
- php8/php_zip.stub.php | 4 ++--
- php8/php_zip_arginfo.h | 4 ++--
- 2 files changed, 4 insertions(+), 4 deletions(-)
-
+diff --git a/php8/php_zip.c b/php8/php_zip.c
+index f131966..841488b 100644
+--- a/php8/php_zip.c
++++ b/php8/php_zip.c
+@@ -334,7 +334,7 @@ typedef struct {
+ #endif
+ } zip_options;
+
+-static int php_zip_parse_options(zval *options, zip_options *opts)
++static int php_zip_parse_options(HashTable *options, zip_options *opts)
+ /* {{{ */
+ {
+ zval *option;
+@@ -347,23 +347,23 @@ static int php_zip_parse_options(zval *options, zip_options *opts)
+ opts->enc_method = -1; /* -1 to not change default */
+ #endif
+
+- if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "remove_all_path", sizeof("remove_all_path") - 1)) != NULL) {
++ if ((option = zend_hash_str_find(options, "remove_all_path", sizeof("remove_all_path") - 1)) != NULL) {
+ opts->remove_all_path = zval_get_long(option);
+ }
+
+- if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "comp_method", sizeof("comp_method") - 1)) != NULL) {
++ if ((option = zend_hash_str_find(options, "comp_method", sizeof("comp_method") - 1)) != NULL) {
+ opts->comp_method = zval_get_long(option);
+
+- if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "comp_flags", sizeof("comp_flags") - 1)) != NULL) {
++ if ((option = zend_hash_str_find(options, "comp_flags", sizeof("comp_flags") - 1)) != NULL) {
+ opts->comp_flags = zval_get_long(option);
+ }
+ }
+
+ #ifdef HAVE_ENCRYPTION
+- if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "enc_method", sizeof("enc_method") - 1)) != NULL) {
++ if ((option = zend_hash_str_find(options, "enc_method", sizeof("enc_method") - 1)) != NULL) {
+ opts->enc_method = zval_get_long(option);
+
+- if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "enc_password", sizeof("enc_password") - 1)) != NULL) {
++ if ((option = zend_hash_str_find(options, "enc_password", sizeof("enc_password") - 1)) != NULL) {
+ if (Z_TYPE_P(option) != IS_STRING) {
+ php_error_docref(NULL, E_WARNING, "enc_password option expected to be a string");
+ return -1;
+@@ -373,7 +373,7 @@ static int php_zip_parse_options(zval *options, zip_options *opts)
+ }
+ #endif
+
+- if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "remove_path", sizeof("remove_path") - 1)) != NULL) {
++ if ((option = zend_hash_str_find(options, "remove_path", sizeof("remove_path") - 1)) != NULL) {
+ if (Z_TYPE_P(option) != IS_STRING) {
+ php_error_docref(NULL, E_WARNING, "remove_path option expected to be a string");
+ return -1;
+@@ -393,7 +393,7 @@ static int php_zip_parse_options(zval *options, zip_options *opts)
+ opts->remove_path = Z_STRVAL_P(option);
+ }
+
+- if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "add_path", sizeof("add_path") - 1)) != NULL) {
++ if ((option = zend_hash_str_find(options, "add_path", sizeof("add_path") - 1)) != NULL) {
+ if (Z_TYPE_P(option) != IS_STRING) {
+ php_error_docref(NULL, E_WARNING, "add_path option expected to be a string");
+ return -1;
+@@ -413,7 +413,7 @@ static int php_zip_parse_options(zval *options, zip_options *opts)
+ opts->add_path = Z_STRVAL_P(option);
+ }
+
+- if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "flags", sizeof("flags") - 1)) != NULL) {
++ if ((option = zend_hash_str_find(options, "flags", sizeof("flags") - 1)) != NULL) {
+ if (Z_TYPE_P(option) != IS_LONG) {
+ php_error_docref(NULL, E_WARNING, "flags option expected to be a integer");
+ return -1;
+@@ -1101,8 +1101,7 @@ static PHP_MSHUTDOWN_FUNCTION(zip);
+ static PHP_MINFO_FUNCTION(zip);
+ /* }}} */
+
+-/* {{{ zip_module_entry
+- */
++/* {{{ zip_module_entry */
+ zend_module_entry zip_module_entry = {
+ STANDARD_MODULE_HEADER,
+ "zip",
+@@ -1122,8 +1121,7 @@ ZEND_GET_MODULE(zip)
+ #endif
+ /* set macro */
+
+-/* {{{ proto resource zip_open(string filename)
+-Create new zip using source uri for output */
++/* {{{ Create new zip using source uri for output */
+ PHP_FUNCTION(zip_open)
+ {
+ char resolved_path[MAXPATHLEN + 1];
+@@ -1163,8 +1161,7 @@ PHP_FUNCTION(zip_open)
+ }
+ /* }}} */
+
+-/* {{{ proto void zip_close(resource zip)
+- Close a Zip archive */
++/* {{{ Close a Zip archive */
+ PHP_FUNCTION(zip_close)
+ {
+ zval * zip;
+@@ -1183,8 +1180,7 @@ PHP_FUNCTION(zip_close)
+ }
+ /* }}} */
+
+-/* {{{ proto resource zip_read(resource zip)
+- Returns the next file in the archive */
++/* {{{ Returns the next file in the archive */
+ PHP_FUNCTION(zip_read)
+ {
+ zval *zip_dp;
+@@ -1229,8 +1225,7 @@ PHP_FUNCTION(zip_read)
+ }
+ /* }}} */
+
+-/* {{{ proto bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])
+- Open a Zip File, pointed by the resource entry */
++/* {{{ Open a Zip File, pointed by the resource entry */
+ /* Dummy function to follow the old API */
+ PHP_FUNCTION(zip_entry_open)
+ {
+@@ -1261,8 +1256,7 @@ PHP_FUNCTION(zip_entry_open)
+ }
+ /* }}} */
+
+-/* {{{ proto bool zip_entry_close(resource zip_ent)
+- Close a zip entry */
++/* {{{ Close a zip entry */
+ PHP_FUNCTION(zip_entry_close)
+ {
+ zval * zip_entry;
+@@ -1280,8 +1274,7 @@ PHP_FUNCTION(zip_entry_close)
+ }
+ /* }}} */
+
+-/* {{{ proto mixed zip_entry_read(resource zip_entry [, int len])
+- Read from an open directory entry */
++/* {{{ Read from an open directory entry */
+ PHP_FUNCTION(zip_entry_read)
+ {
+ zval * zip_entry;
+@@ -1374,40 +1367,35 @@ static void php_zip_entry_get_info(INTERNAL_FUNCTION_PARAMETERS, int opt) /* {{{
+ }
+ /* }}} */
+
+-/* {{{ proto string zip_entry_name(resource zip_entry)
+- Return the name given a ZZip entry */
++/* {{{ Return the name given a ZZip entry */
+ PHP_FUNCTION(zip_entry_name)
+ {
+ php_zip_entry_get_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
+ }
+ /* }}} */
+
+-/* {{{ proto int zip_entry_compressedsize(resource zip_entry)
+- Return the compressed size of a ZZip entry */
++/* {{{ Return the compressed size of a ZZip entry */
+ PHP_FUNCTION(zip_entry_compressedsize)
+ {
+ php_zip_entry_get_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
+ }
+ /* }}} */
+
+-/* {{{ proto int zip_entry_filesize(resource zip_entry)
+- Return the actual filesize of a ZZip entry */
++/* {{{ Return the actual filesize of a ZZip entry */
+ PHP_FUNCTION(zip_entry_filesize)
+ {
+ php_zip_entry_get_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2);
+ }
+ /* }}} */
+
+-/* {{{ proto string zip_entry_compressionmethod(resource zip_entry)
+- Return a string containing the compression method used on a particular entry */
++/* {{{ Return a string containing the compression method used on a particular entry */
+ PHP_FUNCTION(zip_entry_compressionmethod)
+ {
+ php_zip_entry_get_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, 3);
+ }
+ /* }}} */
+
+-/* {{{ proto mixed ZipArchive::open(string source [, int flags])
+-Create new zip using source uri for output, return TRUE on success or the error code */
++/* {{{ Create new zip using source uri for output, return TRUE on success or the error code */
+ PHP_METHOD(ZipArchive, open)
+ {
+ struct zip *intern;
+@@ -1452,16 +1440,20 @@ PHP_METHOD(ZipArchive, open)
+ ze_obj->filename = NULL;
+ }
+
+- /* reduce BC break introduce in libzip 1.6.0
+- "Do not accept empty files as valid zip archives any longer" */
+-
+ /* open for write without option to empty the archive */
++#ifdef ZIP_RDONLY
+ if ((flags & (ZIP_TRUNCATE | ZIP_RDONLY)) == 0) {
++#else
++ if ((flags & ZIP_TRUNCATE) == 0) {
++#endif
+ zend_stat_t st;
+
+ /* exists and is empty */
+ if (VCWD_STAT(resolved_path, &st) == 0 && st.st_size == 0) {
+ php_error_docref(NULL, E_DEPRECATED, "Using empty file as ZipArchive is deprecated");
++
++ /* reduce BC break introduced in libzip 1.6.0
++ "Do not accept empty files as valid zip archives any longer" */
+ flags |= ZIP_TRUNCATE;
+ }
+ }
+@@ -1478,8 +1470,7 @@ PHP_METHOD(ZipArchive, open)
+ }
+ /* }}} */
+
+-/* {{{ proto resource ZipArchive::setPassword(string password)
+-Set the password for the active archive */
++/* {{{ Set the password for the active archive */
+ PHP_METHOD(ZipArchive, setPassword)
+ {
+ struct zip *intern;
+@@ -1506,8 +1497,7 @@ PHP_METHOD(ZipArchive, setPassword)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::close()
+-close the zip archive */
++/* {{{ close the zip archive */
+ PHP_METHOD(ZipArchive, close)
+ {
+ struct zip *intern;
+@@ -1558,8 +1548,7 @@ PHP_METHOD(ZipArchive, close)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::count()
+-close the zip archive */
++/* {{{ close the zip archive */
+ PHP_METHOD(ZipArchive, count)
+ {
+ struct zip *intern;
+@@ -1577,8 +1566,7 @@ PHP_METHOD(ZipArchive, count)
+ }
+ /* }}} */
+
+-/* {{{ proto string ZipArchive::getStatusString()
+- * Returns the status error message, system and/or zip messages */
++/* {{{ Returns the status error message, system and/or zip messages */
+ PHP_METHOD(ZipArchive, getStatusString)
+ {
+ zval *self = ZEND_THIS;
+@@ -1621,8 +1609,7 @@ PHP_METHOD(ZipArchive, getStatusString)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::addEmptyDir(string dirname [, bool flags = 0])
+-Returns the index of the entry named filename in the archive */
++/* {{{ Returns the index of the entry named filename in the archive */
+ PHP_METHOD(ZipArchive, addEmptyDir)
+ {
+ struct zip *intern;
+@@ -1671,19 +1658,19 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /*
+ char *path = ".";
+ size_t path_len = 1;
+ zend_long glob_flags = 0;
+- zval *options = NULL;
++ HashTable *options = NULL;
+ zip_options opts;
+ int found;
+ zend_string *pattern;
+
+ /* 1 == glob, 2 == pcre */
+ if (type == 1) {
+- if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|la",
++ if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|lh",
+ &pattern, &glob_flags, &options) == FAILURE) {
+ RETURN_THROWS();
+ }
+ } else {
+- if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|sa",
++ if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|sh",
+ &pattern, &path, &path_len, &options) == FAILURE) {
+ RETURN_THROWS();
+ }
+@@ -1693,7 +1680,7 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /*
+ php_error_docref(NULL, E_NOTICE, "Empty string as pattern");
+ RETURN_FALSE;
+ }
+- if (options && zend_hash_num_elements(Z_ARRVAL_P(options)) > 0 && (php_zip_parse_options(options, &opts) < 0)) {
++ if (options && zend_hash_num_elements(options) > 0 && (php_zip_parse_options(options, &opts) < 0)) {
+ RETURN_FALSE;
+ }
+
+@@ -1778,24 +1765,21 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /*
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::addGlob(string pattern[,int flags [, array options]])
+-Add files matching the glob pattern. See php's glob for the pattern syntax. */
++/* {{{ Add files matching the glob pattern. See php's glob for the pattern syntax. */
+ PHP_METHOD(ZipArchive, addGlob)
+ {
+ php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::addPattern(string pattern[, string path [, array options]])
+-Add files matching the pcre pattern. See php's pcre for the pattern syntax. */
++/* {{{ Add files matching the pcre pattern. See php's pcre for the pattern syntax. */
+ PHP_METHOD(ZipArchive, addPattern)
+ {
+ php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2);
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::addFile(string filepath[, string entryname[, int start [, int length [, int flags = FL_OVERWRITE]]]])
+-Add a file in a Zip archive using its path and the name to use. */
++/* {{{ Add a file in a Zip archive using its path and the name to use. */
+ PHP_METHOD(ZipArchive, addFile)
+ {
+ zval *self = ZEND_THIS;
+@@ -1829,8 +1813,7 @@ PHP_METHOD(ZipArchive, addFile)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::replaceFile(string filepath, int index[, int start [, int length [, int flags = 0]]])
+-Add a file in a Zip archive using its path and the name to use. */
++/* {{{ Add a file in a Zip archive using its path and the name to use. */
+ PHP_METHOD(ZipArchive, replaceFile)
+ {
+ zval *self = ZEND_THIS;
+@@ -1863,8 +1846,7 @@ PHP_METHOD(ZipArchive, replaceFile)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::addFromString(string name, string content [, int flags = FL_OVERWRITE])
+-Add a file using content and the entry name */
++/* {{{ Add a file using content and the entry name */
+ PHP_METHOD(ZipArchive, addFromString)
+ {
+ struct zip *intern;
+@@ -1913,8 +1895,7 @@ PHP_METHOD(ZipArchive, addFromString)
+ }
+ /* }}} */
+
+-/* {{{ proto array ZipArchive::statName(string filename[, int flags])
+-Returns the information about a the zip entry filename */
++/* {{{ Returns the information about a the zip entry filename */
+ PHP_METHOD(ZipArchive, statName)
+ {
+ struct zip *intern;
+@@ -1935,8 +1916,7 @@ PHP_METHOD(ZipArchive, statName)
+ }
+ /* }}} */
+
+-/* {{{ proto resource ZipArchive::statIndex(int index[, int flags])
+-Returns the zip entry information using its index */
++/* {{{ Returns the zip entry information using its index */
+ PHP_METHOD(ZipArchive, statIndex)
+ {
+ struct zip *intern;
+@@ -1959,8 +1939,7 @@ PHP_METHOD(ZipArchive, statIndex)
+ }
+ /* }}} */
+
+-/* {{{ proto int ZipArchive::locateName(string filename[, int flags])
+-Returns the index of the entry named filename in the archive */
++/* {{{ Returns the index of the entry named filename in the archive */
+ PHP_METHOD(ZipArchive, locateName)
+ {
+ struct zip *intern;
+@@ -1989,8 +1968,7 @@ PHP_METHOD(ZipArchive, locateName)
+ }
+ /* }}} */
+
+-/* {{{ proto string ZipArchive::getNameIndex(int index [, int flags])
+-Returns the name of the file at position index */
++/* {{{ Returns the name of the file at position index */
+ PHP_METHOD(ZipArchive, getNameIndex)
+ {
+ struct zip *intern;
+@@ -2015,8 +1993,7 @@ PHP_METHOD(ZipArchive, getNameIndex)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::setArchiveComment(string comment)
+-Set or remove (NULL/'') the comment of the archive */
++/* {{{ Set or remove (NULL/'') the comment of the archive */
+ PHP_METHOD(ZipArchive, setArchiveComment)
+ {
+ struct zip *intern;
+@@ -2043,8 +2020,7 @@ PHP_METHOD(ZipArchive, setArchiveComment)
+ }
+ /* }}} */
+
+-/* {{{ proto string ZipArchive::getArchiveComment([int flags])
+-Returns the comment of an entry using its index */
++/* {{{ Returns the comment of an entry using its index */
+ PHP_METHOD(ZipArchive, getArchiveComment)
+ {
+ struct zip *intern;
+@@ -2067,8 +2043,7 @@ PHP_METHOD(ZipArchive, getArchiveComment)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::setCommentName(string name, string comment)
+-Set or remove (NULL/'') the comment of an entry using its Name */
++/* {{{ Set or remove (NULL/'') the comment of an entry using its Name */
+ PHP_METHOD(ZipArchive, setCommentName)
+ {
+ struct zip *intern;
+@@ -2101,8 +2076,7 @@ PHP_METHOD(ZipArchive, setCommentName)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::setCommentIndex(int index, string comment)
+-Set or remove (NULL/'') the comment of an entry using its index */
++/* {{{ Set or remove (NULL/'') the comment of an entry using its index */
+ PHP_METHOD(ZipArchive, setCommentIndex)
+ {
+ struct zip *intern;
+@@ -2132,8 +2106,7 @@ PHP_METHOD(ZipArchive, setCommentIndex)
+ /* those constants/functions are only available in libzip since 0.11.2 */
+ #ifdef ZIP_OPSYS_DEFAULT
+
+-/* {{{ proto bool ZipArchive::setExternalAttributesName(string name, int opsys, int attr [, int flags])
+-Set external attributes for file in zip, using its name */
++/* {{{ Set external attributes for file in zip, using its name */
+ PHP_METHOD(ZipArchive, setExternalAttributesName)
+ {
+ struct zip *intern;
+@@ -2166,8 +2139,7 @@ PHP_METHOD(ZipArchive, setExternalAttributesName)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::setExternalAttributesIndex(int index, int opsys, int attr [, int flags])
+-Set external attributes for file in zip, using its index */
++/* {{{ Set external attributes for file in zip, using its index */
+ PHP_METHOD(ZipArchive, setExternalAttributesIndex)
+ {
+ struct zip *intern;
+@@ -2191,8 +2163,7 @@ PHP_METHOD(ZipArchive, setExternalAttributesIndex)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::getExternalAttributesName(string name, int &opsys, int &attr [, int flags])
+-Get external attributes for file in zip, using its name */
++/* {{{ Get external attributes for file in zip, using its name */
+ PHP_METHOD(ZipArchive, getExternalAttributesName)
+ {
+ struct zip *intern;
+@@ -2229,8 +2200,7 @@ PHP_METHOD(ZipArchive, getExternalAttributesName)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::getExternalAttributesIndex(int index, int &opsys, int &attr [, int flags])
+-Get external attributes for file in zip, using its index */
++/* {{{ Get external attributes for file in zip, using its index */
+ PHP_METHOD(ZipArchive, getExternalAttributesIndex)
+ {
+ struct zip *intern;
+@@ -2260,8 +2230,7 @@ PHP_METHOD(ZipArchive, getExternalAttributesIndex)
+ #endif /* ifdef ZIP_OPSYS_DEFAULT */
+
+ #ifdef HAVE_ENCRYPTION
+-/* {{{ proto bool ZipArchive::setEncryptionName(string name, int method, [string password])
+-Set encryption method for file in zip, using its name */
++/* {{{ Set encryption method for file in zip, using its name */
+ PHP_METHOD(ZipArchive, setEncryptionName)
+ {
+ struct zip *intern;
+@@ -2294,8 +2263,7 @@ PHP_METHOD(ZipArchive, setEncryptionName)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::setEncryptionIndex(int index, int method, [string password])
+-Set encryption method for file in zip, using its index */
++/* {{{ Set encryption method for file in zip, using its index */
+ PHP_METHOD(ZipArchive, setEncryptionIndex)
+ {
+ struct zip *intern;
+@@ -2319,8 +2287,7 @@ PHP_METHOD(ZipArchive, setEncryptionIndex)
+ /* }}} */
+ #endif
+
+-/* {{{ proto string ZipArchive::getCommentName(string name[, int flags])
+-Returns the comment of an entry using its name */
++/* {{{ Returns the comment of an entry using its name */
+ PHP_METHOD(ZipArchive, getCommentName)
+ {
+ struct zip *intern;
+@@ -2354,8 +2321,7 @@ PHP_METHOD(ZipArchive, getCommentName)
+ }
+ /* }}} */
+
+-/* {{{ proto string ZipArchive::getCommentIndex(int index[, int flags])
+-Returns the comment of an entry using its index */
++/* {{{ Returns the comment of an entry using its index */
+ PHP_METHOD(ZipArchive, getCommentIndex)
+ {
+ struct zip *intern;
+@@ -2378,8 +2344,7 @@ PHP_METHOD(ZipArchive, getCommentIndex)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::setCompressionName(string name, int comp_method[, int comp_flags])
+-Set the compression of a file in zip, using its name */
++/* {{{ Set the compression of a file in zip, using its name */
+ PHP_METHOD(ZipArchive, setCompressionName)
+ {
+ struct zip *intern;
+@@ -2413,8 +2378,7 @@ PHP_METHOD(ZipArchive, setCompressionName)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::setCompressionIndex(int index, int comp_method[, int comp_flags])
+-Set the compression of a file in zip, using its index */
++/* {{{ Set the compression of a file in zip, using its index */
+ PHP_METHOD(ZipArchive, setCompressionIndex)
+ {
+ struct zip *intern;
+@@ -2438,8 +2402,7 @@ PHP_METHOD(ZipArchive, setCompressionIndex)
+ /* }}} */
+
+ #ifdef HAVE_SET_MTIME
+-/* {{{ proto bool ZipArchive::setMtimeName(string name, int timestamp[, int flags])
+-Set the modification time of a file in zip, using its name */
++/* {{{ Set the modification time of a file in zip, using its name */
+ PHP_METHOD(ZipArchive, setMtimeName)
+ {
+ struct zip *intern;
+@@ -2473,8 +2436,7 @@ PHP_METHOD(ZipArchive, setMtimeName)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::setMtimeIndex(int index, int timestamp[, int flags])
+-Set the modification time of a file in zip, using its index */
++/* {{{ Set the modification time of a file in zip, using its index */
+ PHP_METHOD(ZipArchive, setMtimeIndex)
+ {
+ struct zip *intern;
+@@ -2498,8 +2460,7 @@ PHP_METHOD(ZipArchive, setMtimeIndex)
+ /* }}} */
+ #endif
+
+-/* {{{ proto bool ZipArchive::deleteIndex(int index)
+-Delete a file using its index */
++/* {{{ Delete a file using its index */
+ PHP_METHOD(ZipArchive, deleteIndex)
+ {
+ struct zip *intern;
+@@ -2524,8 +2485,7 @@ PHP_METHOD(ZipArchive, deleteIndex)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::deleteName(string name)
+-Delete a file using its index */
++/* {{{ Delete a file using its index */
+ PHP_METHOD(ZipArchive, deleteName)
+ {
+ struct zip *intern;
+@@ -2552,8 +2512,7 @@ PHP_METHOD(ZipArchive, deleteName)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::renameIndex(int index, string new_name)
+-Rename an entry selected by its index to new_name */
++/* {{{ Rename an entry selected by its index to new_name */
+ PHP_METHOD(ZipArchive, renameIndex)
+ {
+ struct zip *intern;
+@@ -2585,8 +2544,7 @@ PHP_METHOD(ZipArchive, renameIndex)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::renameName(string name, string new_name)
+-Rename an entry selected by its name to new_name */
++/* {{{ Rename an entry selected by its name to new_name */
+ PHP_METHOD(ZipArchive, renameName)
+ {
+ struct zip *intern;
+@@ -2616,8 +2574,7 @@ PHP_METHOD(ZipArchive, renameName)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::unchangeIndex(int index)
+-Changes to the file at position index are reverted */
++/* {{{ Changes to the file at position index are reverted */
+ PHP_METHOD(ZipArchive, unchangeIndex)
+ {
+ struct zip *intern;
+@@ -2642,8 +2599,7 @@ PHP_METHOD(ZipArchive, unchangeIndex)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::unchangeName(string name)
+-Changes to the file named 'name' are reverted */
++/* {{{ Changes to the file named 'name' are reverted */
+ PHP_METHOD(ZipArchive, unchangeName)
+ {
+ struct zip *intern;
+@@ -2672,8 +2628,7 @@ PHP_METHOD(ZipArchive, unchangeName)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::unchangeAll()
+-All changes to files and global information in archive are reverted */
++/* {{{ All changes to files and global information in archive are reverted */
+ PHP_METHOD(ZipArchive, unchangeAll)
+ {
+ struct zip *intern;
+@@ -2693,8 +2648,7 @@ PHP_METHOD(ZipArchive, unchangeAll)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::unchangeArchive()
+-Revert all global changes to the archive archive. For now, this only reverts archive comment changes. */
++/* {{{ Revert all global changes to the archive archive. For now, this only reverts archive comment changes. */
+ PHP_METHOD(ZipArchive, unchangeArchive)
+ {
+ struct zip *intern;
+@@ -2714,8 +2668,7 @@ PHP_METHOD(ZipArchive, unchangeArchive)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::extractTo(string pathto[, mixed files])
+-Extract one or more file from a zip archive */
++/* {{{ Extract one or more file from a zip archive */
+ /* TODO:
+ * - allow index or array of indices
+ * - replace path
+@@ -2868,24 +2821,21 @@ static void php_zip_get_from(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
+ }
+ /* }}} */
+
+-/* {{{ proto string ZipArchive::getFromName(string entryname[, int len [, int flags]])
+-get the contents of an entry using its name */
++/* {{{ get the contents of an entry using its name */
+ PHP_METHOD(ZipArchive, getFromName)
+ {
+ php_zip_get_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
+ }
+ /* }}} */
+
+-/* {{{ proto string ZipArchive::getFromIndex(int index[, int len [, int flags]])
+-get the contents of an entry using its index */
++/* {{{ get the contents of an entry using its index */
+ PHP_METHOD(ZipArchive, getFromIndex)
+ {
+ php_zip_get_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
+ }
+ /* }}} */
+
+-/* {{{ proto resource ZipArchive::getStream(string entryname)
+-get a stream for an entry using its name */
++/* {{{ get a stream for an entry using its name */
+ PHP_METHOD(ZipArchive, getStream)
+ {
+ struct zip *intern;
+@@ -2925,13 +2875,12 @@ static void _php_zip_progress_callback(zip_t *arch, double state, void *ptr)
+ ze_zip_object *obj = ptr;
+
+ ZVAL_DOUBLE(&cb_args[0], state);
+- if (call_user_function_ex(EG(function_table), NULL, &obj->progress_callback, &cb_retval, 1, cb_args, 0, NULL) == SUCCESS && !Z_ISUNDEF(cb_retval)) {
++ if (call_user_function(EG(function_table), NULL, &obj->progress_callback, &cb_retval, 1, cb_args) == SUCCESS && !Z_ISUNDEF(cb_retval)) {
+ zval_ptr_dtor(&cb_retval);
+ }
+ }
+
+-/* {{{ proto bool ZipArchive::registerProgressCallback(double rate, callable callback)
+-register a progression callback: void callback(double state); */
++/* {{{ register a progression callback: void callback(double state); */
+ PHP_METHOD(ZipArchive, registerProgressCallback)
+ {
+ struct zip *intern;
+@@ -2981,7 +2930,7 @@ static int _php_zip_cancel_callback(zip_t *arch, void *ptr)
+ int retval = 0;
+ ze_zip_object *obj = ptr;
+
+- if (call_user_function_ex(EG(function_table), NULL, &obj->cancel_callback, &cb_retval, 0, NULL, 0, NULL) == SUCCESS && !Z_ISUNDEF(cb_retval)) {
++ if (call_user_function(EG(function_table), NULL, &obj->cancel_callback, &cb_retval, 0, NULL) == SUCCESS && !Z_ISUNDEF(cb_retval)) {
+ retval = zval_get_long(&cb_retval);
+ zval_ptr_dtor(&cb_retval);
+ }
+@@ -2989,8 +2938,7 @@ static int _php_zip_cancel_callback(zip_t *arch, void *ptr)
+ return retval;
+ }
+
+-/* {{{ proto bool ZipArchive::registerCancelCallback(callable callback)
+-register a progression callback: int callback(double state); */
++/* {{{ register a progression callback: int callback(double state); */
+ PHP_METHOD(ZipArchive, registerCancelCallback)
+ {
+ struct zip *intern;
+@@ -3033,8 +2981,7 @@ PHP_METHOD(ZipArchive, registerCancelCallback)
+ #endif
+
+ #ifdef HAVE_METHOD_SUPPORTED
+-/* {{{ proto bool ZipArchive::isCompressionMethodSupported(int method, bool enc)
+-check if a compression method is available in used libzip */
++/* {{{ check if a compression method is available in used libzip */
+ PHP_METHOD(ZipArchive, isCompressionMethodSupported)
+ {
+ zend_long method;
+@@ -3047,8 +2994,7 @@ PHP_METHOD(ZipArchive, isCompressionMethodSupported)
+ }
+ /* }}} */
+
+-/* {{{ proto bool ZipArchive::isEncryptionMethodSupported(int method, bool enc)
+-check if a encryption method is available in used libzip */
++/* {{{ check if a encryption method is available in used libzip */
+ PHP_METHOD(ZipArchive, isEncryptionMethodSupported)
+ {
+ zend_long method;
+@@ -3136,6 +3082,9 @@ static PHP_MINIT_FUNCTION(zip)
+ #ifdef ZIP_CM_LZMA2
+ REGISTER_ZIP_CLASS_CONST_LONG("CM_LZMA2", ZIP_CM_LZMA2);
+ #endif
++#ifdef ZIP_CM_ZSTD
++ REGISTER_ZIP_CLASS_CONST_LONG("CM_ZSTD", ZIP_CM_ZSTD);
++#endif
+ #ifdef ZIP_CM_XZ
+ REGISTER_ZIP_CLASS_CONST_LONG("CM_XZ", ZIP_CM_XZ);
+ #endif
+@@ -3240,8 +3189,7 @@ static PHP_MINIT_FUNCTION(zip)
+ }
+ /* }}} */
+
+-/* {{{ PHP_MSHUTDOWN_FUNCTION
+- */
++/* {{{ PHP_MSHUTDOWN_FUNCTION */
+ static PHP_MSHUTDOWN_FUNCTION(zip)
+ {
+ zend_hash_destroy(&zip_prop_handlers);
+@@ -3250,8 +3198,7 @@ static PHP_MSHUTDOWN_FUNCTION(zip)
+ }
+ /* }}} */
+
+-/* {{{ PHP_MINFO_FUNCTION
+- */
++/* {{{ PHP_MINFO_FUNCTION */
+ static PHP_MINFO_FUNCTION(zip)
+ {
+ php_info_print_table_start();
diff --git a/php8/php_zip.stub.php b/php8/php_zip.stub.php
-index da8e373..f85464a 100644
+index da8e373..4d9ba27 100644
--- a/php8/php_zip.stub.php
+++ b/php8/php_zip.stub.php
-@@ -194,9 +194,9 @@ public function registerCancelCallback(callable $callback) {}
+@@ -2,44 +2,66 @@
+
+ /** @generate-function-entries */
+
+-/** @return resource|int|false */
++/**
++ * @return resource|int|false
++ * @deprecated
++ */
+ function zip_open(string $filename) {}
+
+ /**
+ * @param resource $zip
++ * @deprecated
+ */
+ function zip_close($zip): void {}
+
+ /**
+ * @param resource $zip
+ * @return resource|false
++ * @deprecated
+ */
+ function zip_read($zip) {}
+
+ /**
+ * @param resource $zip_dp
+ * @param resource $zip_entry
++ * @deprecated
+ */
+ function zip_entry_open($zip_dp, $zip_entry, string $mode = 'rb'): bool {}
+
+ /**
+ * @param resource $zip_ent
++ * @deprecated
+ */
+ function zip_entry_close($zip_ent): bool {}
+
+-/** @param resource $zip_entry */
++/**
++ * @param resource $zip_entry
++ * @deprecated
++ */
+ function zip_entry_read($zip_entry, int $len = 1024): string|false {}
+
+-/** @param resource $zip_entry */
++/**
++ * @param resource $zip_entry
++ * @deprecated
++ */
+ function zip_entry_name($zip_entry): string|false {}
+
+-/** @param resource $zip_entry */
++/**
++ * @param resource $zip_entry
++ * @deprecated
++ */
+ function zip_entry_compressedsize($zip_entry): int|false {}
+
+-/** @param resource $zip_entry */
++/**
++ * @param resource $zip_entry
++ * @deprecated
++ */
+ function zip_entry_filesize($zip_entry): int|false {}
+
+-/** @param resource $zip_entry */
++/**
++ * @param resource $zip_entry
++ * @deprecated
++ */
+ function zip_entry_compressionmethod($zip_entry): string|false {}
+
+ class ZipArchive
+@@ -194,9 +216,9 @@ class ZipArchive
#ifdef HAVE_METHOD_SUPPORTED
/** @return bool */
@@ -25,10 +830,17 @@ index da8e373..f85464a 100644
#endif
}
diff --git a/php8/php_zip_arginfo.h b/php8/php_zip_arginfo.h
-index c1e8f24..5f150b9 100644
+index c1e8f24..25157d8 100644
--- a/php8/php_zip_arginfo.h
+++ b/php8/php_zip_arginfo.h
-@@ -271,9 +271,9 @@ ZEND_END_ARG_INFO()
+@@ -1,4 +1,5 @@
+-/* This is a generated file, edit the .stub.php file instead. */
++/* This is a generated file, edit the .stub.php file instead.
++ * Stub hash: 95608dd1d6c2ad80ada990a9e939b76dba705d48 */
+
+ ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_open, 0, 0, 1)
+ ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0)
+@@ -271,9 +272,9 @@ ZEND_END_ARG_INFO()
#endif
#if defined(HAVE_METHOD_SUPPORTED)
@@ -40,3 +852,265 @@ index c1e8f24..5f150b9 100644
ZEND_END_ARG_INFO()
#endif
+@@ -366,16 +367,16 @@ ZEND_METHOD(ZipArchive, isEncryptionMethodSupported);
+
+
+ static const zend_function_entry ext_functions[] = {
+- ZEND_FE(zip_open, arginfo_zip_open)
+- ZEND_FE(zip_close, arginfo_zip_close)
+- ZEND_FE(zip_read, arginfo_zip_read)
+- ZEND_FE(zip_entry_open, arginfo_zip_entry_open)
+- ZEND_FE(zip_entry_close, arginfo_zip_entry_close)
+- ZEND_FE(zip_entry_read, arginfo_zip_entry_read)
+- ZEND_FE(zip_entry_name, arginfo_zip_entry_name)
+- ZEND_FE(zip_entry_compressedsize, arginfo_zip_entry_compressedsize)
+- ZEND_FE(zip_entry_filesize, arginfo_zip_entry_filesize)
+- ZEND_FE(zip_entry_compressionmethod, arginfo_zip_entry_compressionmethod)
++ ZEND_DEP_FE(zip_open, arginfo_zip_open)
++ ZEND_DEP_FE(zip_close, arginfo_zip_close)
++ ZEND_DEP_FE(zip_read, arginfo_zip_read)
++ ZEND_DEP_FE(zip_entry_open, arginfo_zip_entry_open)
++ ZEND_DEP_FE(zip_entry_close, arginfo_zip_entry_close)
++ ZEND_DEP_FE(zip_entry_read, arginfo_zip_entry_read)
++ ZEND_DEP_FE(zip_entry_name, arginfo_zip_entry_name)
++ ZEND_DEP_FE(zip_entry_compressedsize, arginfo_zip_entry_compressedsize)
++ ZEND_DEP_FE(zip_entry_filesize, arginfo_zip_entry_filesize)
++ ZEND_DEP_FE(zip_entry_compressionmethod, arginfo_zip_entry_compressionmethod)
+ ZEND_FE_END
+ };
+
+diff --git a/tests/bug53885.phpt b/tests/bug53885.phpt
+index 602eae8..fecbf55 100644
+--- a/tests/bug53885.phpt
++++ b/tests/bug53885.phpt
+@@ -3,6 +3,7 @@ Bug #53885 (ZipArchive segfault with FL_UNCHANGED on empty archive)
+ --SKIPIF--
+ <?php
+ if(!extension_loaded('zip')) die('skip');
++if (PHP_VERSION_ID >= 80000) die('skip only for PHP < 8');
+ ?>
+ --FILE--
+ <?php
+@@ -10,7 +11,7 @@ $fname = dirname(__FILE__)."/test53885.zip";
+ if(file_exists($fname)) unlink($fname);
+ touch($fname);
+ $nx=new ZipArchive();
+-@$nx->open($fname);
++$nx->open($fname);
+ $nx->locateName("a",ZIPARCHIVE::FL_UNCHANGED);
+ $nx->statName("a",ZIPARCHIVE::FL_UNCHANGED);
+ ?>
+diff --git a/tests/bug53885_php8.phpt b/tests/bug53885_php8.phpt
+new file mode 100644
+index 0000000..19fb350
+--- /dev/null
++++ b/tests/bug53885_php8.phpt
+@@ -0,0 +1,26 @@
++--TEST--
++Bug #53885 (ZipArchive segfault with FL_UNCHANGED on empty archive)
++--SKIPIF--
++<?php
++if(!extension_loaded('zip')) die('skip');
++if (PHP_VERSION_ID < 80000) die('skip only for PHP 8');
++?>
++--FILE--
++<?php
++$fname = __DIR__."/test53885.zip";
++if(file_exists($fname)) unlink($fname);
++touch($fname);
++$nx=new ZipArchive();
++$nx->open($fname);
++$nx->locateName("a",ZIPARCHIVE::FL_UNCHANGED);
++$nx->statName("a",ZIPARCHIVE::FL_UNCHANGED);
++?>
++==DONE==
++--CLEAN--
++<?php
++$fname = __DIR__."/test53885.zip";
++unlink($fname);
++?>
++--EXPECTF--
++Deprecated: ZipArchive::open(): Using empty file as ZipArchive is deprecated in %s
++==DONE==
+diff --git a/tests/bug7214.phpt b/tests/bug7214.phpt
+index f791b79..d5c7f3e 100644
+--- a/tests/bug7214.phpt
++++ b/tests/bug7214.phpt
+@@ -5,6 +5,8 @@ Bug #7214 (zip_entry_read() binary safe)
+ /* $Id$ */
+ if(!extension_loaded('zip')) die('skip');
+ ?>
++--INI--
++error_reporting=24575
+ --FILE--
+ <?php
+ $zip = zip_open(dirname(__FILE__)."/binarynull.zip");
+diff --git a/tests/doubleclose2.phpt b/tests/doubleclose2.phpt
+index 56cc37c..7770f64 100644
+--- a/tests/doubleclose2.phpt
++++ b/tests/doubleclose2.phpt
+@@ -5,6 +5,8 @@ close() called twice
+ if(!extension_loaded('zip')) die('skip');
+ if (PHP_VERSION_ID < 80000) die('skip PHP 8 only');
+ ?>
++--INI--
++error_reporting=24575
+ --FILE--
+ <?php
+
+diff --git a/tests/oo_setcompression.phpt b/tests/oo_setcompression.phpt
+index 8a746a8..fd5fb54 100644
+--- a/tests/oo_setcompression.phpt
++++ b/tests/oo_setcompression.phpt
+@@ -5,6 +5,8 @@ setCompressionName and setCompressionIndex methods
+ /* $Id$ */
+ if (!extension_loaded('zip')) die('skip');
+ ?>
++--INI--
++error_reporting=24575
+ --FILE--
+ <?php
+ $tmpfile = dirname(__FILE__) . '/__tmp_oo_set_compression.zip';
+diff --git a/tests/utils.inc b/tests/utils.inc
+index 0d95677..9a3dfc3 100644
+--- a/tests/utils.inc
++++ b/tests/utils.inc
+@@ -27,7 +27,7 @@ function verify_entries($zip, $entries = []) {
+ return $verified;
+ }
+
+-/* recursively remove a directoryy */
++/* recursively remove a directory */
+ function rmdir_rf($dir) {
+ if ($handle = opendir($dir)) {
+ while (false !== ($item = readdir($handle))) {
+diff --git a/tests/zip_close.phpt b/tests/zip_close.phpt
+index 7f9d09a..9a48b77 100644
+--- a/tests/zip_close.phpt
++++ b/tests/zip_close.phpt
+@@ -5,6 +5,8 @@ zip_close() function
+ /* $Id$ */
+ if(!extension_loaded('zip')) die('skip');
+ ?>
++--INI--
++error_reporting=24575
+ --FILE--
+ <?php
+ $zip = zip_open(dirname(__FILE__)."/test_procedural.zip");
+diff --git a/tests/zip_entry_close2.phpt b/tests/zip_entry_close2.phpt
+index 82c574c..4fc1b8d 100644
+--- a/tests/zip_entry_close2.phpt
++++ b/tests/zip_entry_close2.phpt
+@@ -5,6 +5,8 @@ zip_entry_close() function: simple and double call
+ if(!extension_loaded('zip')) die('skip');
+ if (PHP_VERSION_ID < 80000) die('skip PHP 8 only');
+ ?>
++--INI--
++error_reporting=24575
+ --FILE--
+ <?php
+ $zip = zip_open(__DIR__."/test_procedural.zip");
+diff --git a/tests/zip_entry_compressedsize.phpt b/tests/zip_entry_compressedsize.phpt
+index fefa6e5..3568d41 100644
+--- a/tests/zip_entry_compressedsize.phpt
++++ b/tests/zip_entry_compressedsize.phpt
+@@ -5,6 +5,8 @@ zip_entry_compressedsize() function
+ /* $Id$ */
+ if(!extension_loaded('zip')) die('skip');
+ ?>
++--INI--
++error_reporting=24575
+ --FILE--
+ <?php
+ $zip = zip_open(dirname(__FILE__)."/test_procedural.zip");
+diff --git a/tests/zip_entry_compressionmethod.phpt b/tests/zip_entry_compressionmethod.phpt
+index cabdbb7..b01bc77 100644
+--- a/tests/zip_entry_compressionmethod.phpt
++++ b/tests/zip_entry_compressionmethod.phpt
+@@ -5,6 +5,8 @@ zip_entry_compressionmethod() function
+ /* $Id$ */
+ if(!extension_loaded('zip')) die('skip');
+ ?>
++--INI--
++error_reporting=24575
+ --FILE--
+ <?php
+ $zip = zip_open(dirname(__FILE__)."/test_procedural.zip");
+diff --git a/tests/zip_entry_filesize.phpt b/tests/zip_entry_filesize.phpt
+index b8d8820..d0eab21 100644
+--- a/tests/zip_entry_filesize.phpt
++++ b/tests/zip_entry_filesize.phpt
+@@ -5,6 +5,8 @@ zip_entry_filesize() function
+ /* $Id$ */
+ if(!extension_loaded('zip')) die('skip');
+ ?>
++--INI--
++error_reporting=24575
+ --FILE--
+ <?php
+ $zip = zip_open(dirname(__FILE__)."/test_procedural.zip");
+diff --git a/tests/zip_entry_name.phpt b/tests/zip_entry_name.phpt
+index 1916e25..15923e6 100644
+--- a/tests/zip_entry_name.phpt
++++ b/tests/zip_entry_name.phpt
+@@ -5,6 +5,8 @@ zip_entry_name() function
+ /* $Id$ */
+ if(!extension_loaded('zip')) die('skip');
+ ?>
++--INI--
++error_reporting=24575
+ --FILE--
+ <?php
+ $zip = zip_open(dirname(__FILE__)."/test_procedural.zip");
+diff --git a/tests/zip_entry_open.phpt b/tests/zip_entry_open.phpt
+index c32fe57..a1e30df 100644
+--- a/tests/zip_entry_open.phpt
++++ b/tests/zip_entry_open.phpt
+@@ -5,6 +5,8 @@ zip_entry_open() function
+ /* $Id$ */
+ if(!extension_loaded('zip')) die('skip');
+ ?>
++--INI--
++error_reporting=24575
+ --FILE--
+ <?php
+ $zip = zip_open(dirname(__FILE__)."/test_procedural.zip");
+diff --git a/tests/zip_entry_read.phpt b/tests/zip_entry_read.phpt
+index d876f03..f867c8b 100644
+--- a/tests/zip_entry_read.phpt
++++ b/tests/zip_entry_read.phpt
+@@ -5,6 +5,8 @@ zip_entry_read() function
+ /* $Id$ */
+ if(!extension_loaded('zip')) die('skip');
+ ?>
++--INI--
++error_reporting=24575
+ --FILE--
+ <?php
+ $zip = zip_open(dirname(__FILE__)."/test_procedural.zip");
+diff --git a/tests/zip_open.phpt b/tests/zip_open.phpt
+index 91474bc..f0c01b8 100644
+--- a/tests/zip_open.phpt
++++ b/tests/zip_open.phpt
+@@ -5,6 +5,8 @@ zip_open() function
+ /* $Id$ */
+ if(!extension_loaded('zip')) die('skip');
+ ?>
++--INI--
++error_reporting=24575
+ --FILE--
+ <?php
+ $zip = zip_open(dirname(__FILE__)."/test_procedural.zip");
+diff --git a/tests/zip_read.phpt b/tests/zip_read.phpt
+index 5cadb2d..af72879 100644
+--- a/tests/zip_read.phpt
++++ b/tests/zip_read.phpt
+@@ -5,6 +5,8 @@ zip_read() function
+ /* $Id$ */
+ if(!extension_loaded('zip')) die('skip');
+ ?>
++--INI--
++error_reporting=24575
+ --FILE--
+ <?php
+ $zip = zip_open(dirname(__FILE__)."/test_procedural.zip");