diff options
| -rw-r--r-- | 0001-8.5-compat.patch | 5938 | ||||
| -rw-r--r-- | 0001-Fix-leak-when-path-is-too-long-in-ZipArchive-extract.patch | 103 | ||||
| -rw-r--r-- | 0001-Fix-memory-leak-in-zip-when-encountering-empty-glob-.patch | 160 | ||||
| -rw-r--r-- | 0001-fix-test-for-8.5.0beta2.patch | 24 | ||||
| -rw-r--r-- | 0002-Fix-GH-19688-Remove-pattern-overflow-in-zip-addGlob.patch | 142 | ||||
| -rw-r--r-- | 0003-regen-arginfo.patch | 160 | ||||
| -rw-r--r-- | PHPINFO | 4 | ||||
| -rw-r--r-- | REFLECTION | 4 | ||||
| -rw-r--r-- | php-pecl-zip.spec | 22 | 
9 files changed, 9 insertions, 6548 deletions
diff --git a/0001-8.5-compat.patch b/0001-8.5-compat.patch deleted file mode 100644 index c5b33da..0000000 --- a/0001-8.5-compat.patch +++ /dev/null @@ -1,5938 +0,0 @@ -From bee1898bbbf2a38c1e51162704022f185ce00190 Mon Sep 17 00:00:00 2001 -From: Remi Collet <remi@remirepo.net> -Date: Tue, 1 Jul 2025 07:53:22 +0200 -Subject: [PATCH 1/2] 8.5 compat - ---- - config.m4               |    3 + - config.w32              |    2 + - php85/php_zip.c         | 3200 +++++++++++++++++++++++++++++++++++++++ - php85/php_zip.h         |  101 ++ - php85/php_zip.stub.php  |  824 ++++++++++ - php85/php_zip_arginfo.h | 1343 ++++++++++++++++ - php85/zip_stream.c      |  390 +++++ - 7 files changed, 5863 insertions(+) - create mode 100644 php85/php_zip.c - create mode 100644 php85/php_zip.h - create mode 100644 php85/php_zip.stub.php - create mode 100644 php85/php_zip_arginfo.h - create mode 100644 php85/zip_stream.c - -diff --git a/config.m4 b/config.m4 -index 9ea6130..9d5e0c7 100644 ---- a/config.m4 -+++ b/config.m4 -@@ -36,6 +36,9 @@ if test "$PHP_ZIP" != "no"; then -   elif test $PHP_VERSION -lt 80500; then -     AC_MSG_RESULT(8.1/8.2/8.3/8.4) -     subdir=php81 -+  elif test $PHP_VERSION -lt 80600; then -+    AC_MSG_RESULT(8.5) -+    subdir=php85 -   else -     AC_MSG_ERROR(PHP version $PHP_VERSION is not supported yet) -   fi -diff --git a/config.w32 b/config.w32 -index d6f0917..0345aae 100644 ---- a/config.w32 -+++ b/config.w32 -@@ -36,6 +36,8 @@ if (PHP_ZIP != "no") { - 				configure_module_dirname = configure_module_dirname + "\\php81"; - 			} else if (PHP_VERSION == 8 && PHP_MINOR_VERSION == 4) { - 				configure_module_dirname = configure_module_dirname + "\\php81"; -+			} else if (PHP_VERSION == 8 && PHP_MINOR_VERSION == 5) { -+				configure_module_dirname = configure_module_dirname + "\\php85"; - 			} else { - 				ERROR("PHP " + PHP_VERSION + "." + PHP_MINOR_VERSION + " not supported"); - 			} -diff --git a/php85/php_zip.c b/php85/php_zip.c -new file mode 100644 -index 0000000..450c297 ---- /dev/null -+++ b/php85/php_zip.c -@@ -0,0 +1,3200 @@ -+/* -+  +----------------------------------------------------------------------+ -+  | Copyright (c) The PHP Group                                          | -+  +----------------------------------------------------------------------+ -+  | This source file is subject to version 3.01 of the PHP license,      | -+  | that is bundled with this package in the file LICENSE, and is        | -+  | available through the world-wide-web at the following url:           | -+  | https://www.php.net/license/3_01.txt                                 | -+  | If you did not receive a copy of the PHP license and are unable to   | -+  | obtain it through the world-wide-web, please send a note to          | -+  | license@php.net so we can mail you a copy immediately.               | -+  +----------------------------------------------------------------------+ -+  | Author: Piere-Alain Joye <pierre@php.net>                            | -+  +----------------------------------------------------------------------+ -+*/ -+ -+ -+#ifdef HAVE_CONFIG_H -+#include <config.h> -+#endif -+ -+#include "php.h" -+#include "ext/standard/info.h" -+#include "ext/standard/file.h" -+#include "ext/standard/php_string.h" /* For php_basename() */ -+#include "ext/pcre/php_pcre.h" -+#include "ext/standard/php_filestat.h" -+#include "zend_attributes.h" -+#include "zend_interfaces.h" -+#include "php_zip.h" -+#include "php_zip_arginfo.h" -+ -+#include "php_glob.h" -+ -+/* {{{ Resource le */ -+static int le_zip_dir; -+#define le_zip_dir_name "Zip Directory" -+static int le_zip_entry; -+#define le_zip_entry_name "Zip Entry" -+/* }}} */ -+ -+/* {{{ PHP_ZIP_STAT_INDEX(za, index, flags, sb) */ -+#define PHP_ZIP_STAT_INDEX(za, index, flags, sb) \ -+	if (zip_stat_index(za, index, flags, &sb) != 0) { \ -+		RETURN_FALSE; \ -+	} -+/* }}} */ -+ -+/* {{{  PHP_ZIP_STAT_PATH(za, path, path_len, flags, sb) -+	This is always used for the first argument*/ -+#define PHP_ZIP_STAT_PATH(za, path, path_len, flags, sb) \ -+	if (path_len == 0) { \ -+		zend_argument_must_not_be_empty_error(1); \ -+		RETURN_THROWS(); \ -+	} \ -+	if (zip_stat(za, path, flags, &sb) != 0) { \ -+		RETURN_FALSE; \ -+	} -+/* }}} */ -+ -+/* {{{ PHP_ZIP_SET_FILE_COMMENT(za, index, comment, comment_len) */ -+#define PHP_ZIP_SET_FILE_COMMENT(za, index, comment, comment_len) \ -+	if (comment_len == 0) { \ -+		/* Passing NULL remove the existing comment */ \ -+		if (zip_file_set_comment(za, index, NULL, 0, 0) < 0) { \ -+			RETURN_FALSE; \ -+		} \ -+	} else if (zip_file_set_comment(za, index, comment, comment_len, 0) < 0) { \ -+		RETURN_FALSE; \ -+	} \ -+	RETURN_TRUE; -+/* }}} */ -+ -+# define add_ascii_assoc_string add_assoc_string -+# define add_ascii_assoc_long add_assoc_long -+ -+/* Flatten a path by making a relative path (to .)*/ -+static char * php_zip_make_relative_path(char *path, size_t path_len) /* {{{ */ -+{ -+	char *path_begin = path; -+	size_t i; -+ -+	if (path_len < 1 || path == NULL) { -+		return NULL; -+	} -+ -+	if (IS_ABSOLUTE_PATH(path, path_len)) { -+		return path + COPY_WHEN_ABSOLUTE(path) + 1; -+	} -+ -+	i = path_len; -+ -+	while (1) { -+		while (i > 0 && !IS_SLASH(path[i])) { -+			i--; -+		} -+ -+		if (!i) { -+			return path; -+		} -+ -+		if (i >= 2 && path[i -1] == '.') { -+			/* i is the position of ., add 1 for / */ -+			path_begin = path + i + 1; -+			break; -+		} -+		i--; -+	} -+ -+	return path_begin; -+} -+/* }}} */ -+ -+# define CWD_STATE_ALLOC(l) emalloc(l) -+# define CWD_STATE_FREE(s)  efree(s) -+ -+/* {{{ php_zip_extract_file */ -+static int php_zip_extract_file(struct zip * za, char *dest, const char *file, size_t file_len, zip_int64_t idx) -+{ -+	php_stream_statbuf ssb; -+	struct zip_file *zf; -+	struct zip_stat sb; -+	char b[8192]; -+	int n, ret; -+	php_stream *stream; -+	char *fullpath; -+	char *file_dirname_fullpath; -+	char file_dirname[MAXPATHLEN]; -+	size_t dir_len, len; -+	int is_dir_only = 0; -+	char *path_cleaned; -+	size_t path_cleaned_len; -+	cwd_state new_state; -+	zend_string *file_basename; -+ -+	if (idx < 0) { -+		idx = zip_name_locate(za, file, 0); -+		if (idx < 0) { -+			return 0; -+		} -+	} -+	new_state.cwd = CWD_STATE_ALLOC(1); -+	new_state.cwd[0] = '\0'; -+	new_state.cwd_length = 0; -+ -+	/* Clean/normlize the path and then transform any path (absolute or relative) -+		 to a path relative to cwd (../../mydir/foo.txt > mydir/foo.txt) -+	 */ -+	virtual_file_ex(&new_state, file, NULL, CWD_EXPAND); -+	path_cleaned =  php_zip_make_relative_path(new_state.cwd, new_state.cwd_length); -+	if(!path_cleaned) { -+		CWD_STATE_FREE(new_state.cwd); -+		return 0; -+	} -+	path_cleaned_len = strlen(path_cleaned); -+ -+	if (path_cleaned_len >= MAXPATHLEN || zip_stat_index(za, idx, 0, &sb) != 0) { -+		CWD_STATE_FREE(new_state.cwd); -+		return 0; -+	} -+ -+	/* it is a directory only, see #40228 */ -+	if (path_cleaned_len > 1 && IS_SLASH(path_cleaned[path_cleaned_len - 1])) { -+		len = spprintf(&file_dirname_fullpath, 0, "%s/%s", dest, path_cleaned); -+		is_dir_only = 1; -+	} else { -+		memcpy(file_dirname, path_cleaned, path_cleaned_len); -+		dir_len = zend_dirname(file_dirname, path_cleaned_len); -+ -+		if (!dir_len || (dir_len == 1 && file_dirname[0] == '.')) { -+			len = spprintf(&file_dirname_fullpath, 0, "%s", dest); -+		} else { -+			len = spprintf(&file_dirname_fullpath, 0, "%s/%s", dest, file_dirname); -+		} -+ -+		file_basename =	php_basename(path_cleaned, path_cleaned_len, NULL, 0); -+ -+		if (ZIP_OPENBASEDIR_CHECKPATH(file_dirname_fullpath)) { -+			efree(file_dirname_fullpath); -+			zend_string_release_ex(file_basename, 0); -+			CWD_STATE_FREE(new_state.cwd); -+			return 0; -+		} -+	} -+ -+	/* let see if the path already exists */ -+	if (php_stream_stat_path_ex(file_dirname_fullpath, PHP_STREAM_URL_STAT_QUIET, &ssb, NULL) < 0) { -+		ret = php_stream_mkdir(file_dirname_fullpath, 0777,  PHP_STREAM_MKDIR_RECURSIVE|REPORT_ERRORS, NULL); -+		if (!ret) { -+			efree(file_dirname_fullpath); -+			if (!is_dir_only) { -+				zend_string_release_ex(file_basename, 0); -+			} -+			CWD_STATE_FREE(new_state.cwd); -+			return 0; -+		} -+	} -+ -+	/* it is a standalone directory, job done */ -+	if (is_dir_only) { -+		efree(file_dirname_fullpath); -+		CWD_STATE_FREE(new_state.cwd); -+		return 1; -+	} -+ -+	len = spprintf(&fullpath, 0, "%s/%s", file_dirname_fullpath, ZSTR_VAL(file_basename)); -+	if (!len) { -+		efree(file_dirname_fullpath); -+		zend_string_release_ex(file_basename, 0); -+		CWD_STATE_FREE(new_state.cwd); -+		return 0; -+	} else if (len > MAXPATHLEN) { -+		php_error_docref(NULL, E_WARNING, "Full extraction path exceed MAXPATHLEN (%i)", MAXPATHLEN); -+		efree(file_dirname_fullpath); -+		zend_string_release_ex(file_basename, 0); -+		CWD_STATE_FREE(new_state.cwd); -+		return 0; -+	} -+ -+	/* check again the full path, not sure if it -+	 * is required, does a file can have a different -+	 * safemode status as its parent folder? -+	 */ -+	if (ZIP_OPENBASEDIR_CHECKPATH(fullpath)) { -+		efree(fullpath); -+		efree(file_dirname_fullpath); -+		zend_string_release_ex(file_basename, 0); -+		CWD_STATE_FREE(new_state.cwd); -+		return 0; -+	} -+ -+	zf = zip_fopen_index(za, idx, 0); -+	if (zf == NULL) { -+		n = -1; -+		goto done; -+	} -+ -+	stream = php_stream_open_wrapper(fullpath, "w+b", REPORT_ERRORS, NULL); -+ -+	if (stream == NULL) { -+		n = -1; -+		zip_fclose(zf); -+		goto done; -+	} -+ -+	n = 0; -+ -+	while ((n=zip_fread(zf, b, sizeof(b))) > 0) { -+		php_stream_write(stream, b, n); -+	} -+ -+	if (stream->wrapper->wops->stream_metadata) { -+		struct utimbuf ut; -+ -+		ut.modtime = ut.actime = sb.mtime; -+		stream->wrapper->wops->stream_metadata(stream->wrapper, fullpath, PHP_STREAM_META_TOUCH, &ut, NULL); -+	} -+ -+	php_stream_close(stream); -+	n = zip_fclose(zf); -+ -+done: -+	efree(fullpath); -+	zend_string_release_ex(file_basename, 0); -+	efree(file_dirname_fullpath); -+	CWD_STATE_FREE(new_state.cwd); -+ -+	if (n<0) { -+		return 0; -+	} else { -+		return 1; -+	} -+} -+/* }}} */ -+ -+static int php_zip_add_file(ze_zip_object *obj, const char *filename, size_t filename_len, -+	char *entry_name, size_t entry_name_len, /* unused if replace >= 0 */ -+	zip_uint64_t offset_start, zip_uint64_t offset_len, -+	zend_long replace, /* index to replace, add new file if < 0 */ -+	zip_flags_t flags -+) /* {{{ */ -+{ -+	struct zip_source *zs; -+	char resolved_path[MAXPATHLEN]; -+	php_stream_statbuf ssb; -+ -+	if (ZIP_OPENBASEDIR_CHECKPATH(filename)) { -+		return -1; -+	} -+ -+	if (!expand_filepath(filename, resolved_path)) { -+		php_error_docref(NULL, E_WARNING, "No such file or directory"); -+		return -1; -+	} -+ -+	if (php_stream_stat_path_ex(resolved_path, PHP_STREAM_URL_STAT_QUIET, &ssb, NULL)) { -+		php_error_docref(NULL, E_WARNING, "No such file or directory"); -+		return -1; -+	} -+ -+	if (flags & ZIP_FL_OPEN_FILE_NOW) { -+		FILE *fd; -+		fd = fopen(resolved_path, "rb"); -+		if (!fd) { -+			return -1; -+		} -+		flags ^= ZIP_FL_OPEN_FILE_NOW; -+		zs = zip_source_filep(obj->za, fd, offset_start, offset_len); -+	} else { -+		zs = zip_source_file(obj->za, resolved_path, offset_start, offset_len); -+	} -+	if (!zs) { -+		return -1; -+	} -+	/* Replace */ -+	if (replace >= 0) { -+		if (zip_file_replace(obj->za, replace, zs, flags) < 0) { -+			zip_source_free(zs); -+			return -1; -+		} -+		zip_error_clear(obj->za); -+		return 1; -+	} -+	/* Add */ -+	obj->last_id = zip_file_add(obj->za, entry_name, zs, flags); -+	if (obj->last_id < 0) { -+		zip_source_free(zs); -+		return -1; -+	} -+	zip_error_clear(obj->za); -+	return 1; -+} -+/* }}} */ -+ -+typedef struct { -+	zend_long    remove_all_path; -+	char        *remove_path; -+	size_t       remove_path_len; -+	char        *add_path; -+	size_t       add_path_len; -+	zip_flags_t  flags; -+	zip_int32_t  comp_method; -+	zip_uint32_t comp_flags; -+#ifdef HAVE_ENCRYPTION -+	zip_int16_t  enc_method; -+	char        *enc_password; -+#endif -+} zip_options; -+ -+/* Expects opts to be zero-initialized. */ -+static int php_zip_parse_options(HashTable *options, zip_options *opts) -+/* {{{ */ -+{ -+	zval *option; -+ -+	/* default values */ -+	opts->flags = ZIP_FL_OVERWRITE; -+	opts->comp_method = -1; /* -1 to not change default */ -+#ifdef HAVE_ENCRYPTION -+	opts->enc_method = -1;  /* -1 to not change default */ -+#endif -+ -+	if ((option = zend_hash_str_find(options, "remove_all_path", sizeof("remove_all_path") - 1)) != NULL) { -+		if (Z_TYPE_P(option) != IS_FALSE && Z_TYPE_P(option) != IS_TRUE) { -+			php_error_docref(NULL, E_WARNING, "Option \"remove_all_path\" must be of type bool, %s given", -+				zend_zval_value_name(option)); -+		} -+		opts->remove_all_path = zval_get_long(option); -+	} -+ -+	if ((option = zend_hash_str_find(options, "comp_method", sizeof("comp_method") - 1)) != NULL) { -+		if (Z_TYPE_P(option) != IS_LONG) { -+			php_error_docref(NULL, E_WARNING, "Option \"comp_method\" must be of type int, %s given", -+				zend_zval_value_name(option)); -+		} -+		opts->comp_method = zval_get_long(option); -+ -+		if ((option = zend_hash_str_find(options, "comp_flags", sizeof("comp_flags") - 1)) != NULL) { -+			if (Z_TYPE_P(option) != IS_LONG) { -+				php_error_docref(NULL, E_WARNING, "Option \"comp_flags\" must be of type int, %s given", -+					zend_zval_value_name(option)); -+			} -+			opts->comp_flags = zval_get_long(option); -+		} -+	} -+ -+#ifdef HAVE_ENCRYPTION -+	if ((option = zend_hash_str_find(options, "enc_method", sizeof("enc_method") - 1)) != NULL) { -+		if (Z_TYPE_P(option) != IS_LONG) { -+			php_error_docref(NULL, E_WARNING, "Option \"enc_method\" must be of type int, %s given", -+				zend_zval_value_name(option)); -+		} -+		opts->enc_method = zval_get_long(option); -+ -+		if ((option = zend_hash_str_find(options, "enc_password", sizeof("enc_password") - 1)) != NULL) { -+			if (Z_TYPE_P(option) != IS_STRING) { -+				zend_type_error("Option \"enc_password\" must be of type string, %s given", -+					zend_zval_value_name(option)); -+				return -1; -+			} -+			opts->enc_password = Z_STRVAL_P(option); -+		} -+	} -+#endif -+ -+	if ((option = zend_hash_str_find(options, "remove_path", sizeof("remove_path") - 1)) != NULL) { -+		if (Z_TYPE_P(option) != IS_STRING) { -+			zend_type_error("Option \"remove_path\" must be of type string, %s given", -+				zend_zval_value_name(option)); -+			return -1; -+		} -+ -+		if (Z_STRLEN_P(option) == 0) { -+			zend_value_error("Option \"remove_path\" must not be empty"); -+			return -1; -+		} -+ -+		if (Z_STRLEN_P(option) >= MAXPATHLEN) { -+			zend_value_error("Option \"remove_path\" must be less than %d bytes", MAXPATHLEN - 1); -+			return -1; -+		} -+		opts->remove_path_len = Z_STRLEN_P(option); -+		opts->remove_path = Z_STRVAL_P(option); -+	} -+ -+	if ((option = zend_hash_str_find(options, "add_path", sizeof("add_path") - 1)) != NULL) { -+		if (Z_TYPE_P(option) != IS_STRING) { -+			zend_type_error("Option \"add_path\" must be of type string, %s given", -+				zend_zval_value_name(option)); -+			return -1; -+		} -+ -+		if (Z_STRLEN_P(option) == 0) { -+			zend_value_error("Option \"add_path\" must not be empty"); -+			return -1; -+		} -+ -+		if (Z_STRLEN_P(option) >= MAXPATHLEN) { -+			zend_value_error("Option \"add_path\" must be less than %d bytes", MAXPATHLEN - 1); -+			return -1; -+		} -+		opts->add_path_len = Z_STRLEN_P(option); -+		opts->add_path = Z_STRVAL_P(option); -+	} -+ -+	if ((option = zend_hash_str_find(options, "flags", sizeof("flags") - 1)) != NULL) { -+		if (Z_TYPE_P(option) != IS_LONG) { -+			zend_type_error("Option \"flags\" must be of type int, %s given", -+				zend_zval_value_name(option)); -+			return -1; -+		} -+		opts->flags = Z_LVAL_P(option); -+	} -+ -+	return 1; -+} -+/* }}} */ -+ -+/* {{{ ZIP_FROM_OBJECT */ -+#define ZIP_FROM_OBJECT(intern, object) \ -+	{ \ -+		ze_zip_object *obj = Z_ZIP_P(object); \ -+		intern = obj->za; \ -+		if (!intern) { \ -+			zend_value_error("Invalid or uninitialized Zip object"); \ -+			RETURN_THROWS(); \ -+		} \ -+	} -+/* }}} */ -+ -+/* {{{ RETURN_SB(sb) */ -+#ifdef HAVE_ENCRYPTION -+#define RETURN_SB(sb) \ -+	{ \ -+		array_init(return_value); \ -+		add_ascii_assoc_string(return_value, "name", (char *)(sb)->name); \ -+		add_ascii_assoc_long(return_value, "index", (zend_long) (sb)->index); \ -+		add_ascii_assoc_long(return_value, "crc", (zend_long) (sb)->crc); \ -+		add_ascii_assoc_long(return_value, "size", (zend_long) (sb)->size); \ -+		add_ascii_assoc_long(return_value, "mtime", (zend_long) (sb)->mtime); \ -+		add_ascii_assoc_long(return_value, "comp_size", (zend_long) (sb)->comp_size); \ -+		add_ascii_assoc_long(return_value, "comp_method", (zend_long) (sb)->comp_method); \ -+		add_ascii_assoc_long(return_value, "encryption_method", (zend_long) (sb)->encryption_method); \ -+	} -+#else -+#define RETURN_SB(sb) \ -+	{ \ -+		array_init(return_value); \ -+		add_ascii_assoc_string(return_value, "name", (char *)(sb)->name); \ -+		add_ascii_assoc_long(return_value, "index", (zend_long) (sb)->index); \ -+		add_ascii_assoc_long(return_value, "crc", (zend_long) (sb)->crc); \ -+		add_ascii_assoc_long(return_value, "size", (zend_long) (sb)->size); \ -+		add_ascii_assoc_long(return_value, "mtime", (zend_long) (sb)->mtime); \ -+		add_ascii_assoc_long(return_value, "comp_size", (zend_long) (sb)->comp_size); \ -+		add_ascii_assoc_long(return_value, "comp_method", (zend_long) (sb)->comp_method); \ -+	} -+#endif -+/* }}} */ -+ -+static zend_long php_zip_status(ze_zip_object *obj) /* {{{ */ -+{ -+	int zep = obj->err_zip; /* saved err if closed */ -+ -+	if (obj->za) { -+#if LIBZIP_VERSION_MAJOR < 1 -+		int syp; -+ -+		zip_error_get(obj->za, &zep, &syp); -+#else -+		zip_error_t *err; -+ -+		err = zip_get_error(obj->za); -+		zep = zip_error_code_zip(err); -+		zip_error_fini(err); -+#endif -+	} -+	return zep; -+} -+/* }}} */ -+ -+static zend_long php_zip_last_id(ze_zip_object *obj) /* {{{ */ -+{ -+	return obj->last_id; -+} -+/* }}} */ -+ -+static zend_long php_zip_status_sys(ze_zip_object *obj) /* {{{ */ -+{ -+	int syp = obj->err_sys;  /* saved err if closed */ -+ -+	if (obj->za) { -+#if LIBZIP_VERSION_MAJOR < 1 -+		int zep; -+ -+		zip_error_get(obj->za, &zep, &syp); -+#else -+		zip_error_t *err; -+ -+		err = zip_get_error(obj->za); -+		syp = zip_error_code_system(err); -+		zip_error_fini(err); -+#endif -+	} -+	return syp; -+} -+/* }}} */ -+ -+static zend_long php_zip_get_num_files(ze_zip_object *obj) /* {{{ */ -+{ -+	if (obj->za) { -+		zip_int64_t num = zip_get_num_entries(obj->za, 0); -+		return MIN(num, ZEND_LONG_MAX); -+	} -+	return 0; -+} -+/* }}} */ -+ -+static char * php_zipobj_get_filename(ze_zip_object *obj, int *len) /* {{{ */ -+{ -+	if (obj && obj->filename) { -+		*len = strlen(obj->filename); -+		return obj->filename; -+	} -+	return NULL; -+} -+/* }}} */ -+ -+static char * php_zipobj_get_zip_comment(ze_zip_object *obj, int *len) /* {{{ */ -+{ -+	if (obj->za) { -+		return (char *)zip_get_archive_comment(obj->za, len, 0); -+	} -+	return NULL; -+} -+/* }}} */ -+ -+int php_zip_glob(char *pattern, int pattern_len, zend_long flags, zval *return_value) /* {{{ */ -+{ -+	int cwd_skip = 0; -+#ifdef ZTS -+	char cwd[MAXPATHLEN]; -+	char work_pattern[MAXPATHLEN]; -+	char *result; -+#endif -+	php_glob_t globbuf; -+	size_t n; -+	int ret; -+ -+	if (pattern_len >= MAXPATHLEN) { -+		php_error_docref(NULL, E_WARNING, "Pattern exceeds the maximum allowed length of %d characters", MAXPATHLEN); -+		return -1; -+	} -+ -+	if ((PHP_GLOB_AVAILABLE_FLAGS & flags) != flags) { -+ -+		php_error_docref(NULL, E_WARNING, "At least one of the passed flags is invalid or not supported on this platform"); -+		return -1; -+	} -+ -+#ifdef ZTS -+	if (!IS_ABSOLUTE_PATH(pattern, pattern_len)) { -+		result = VCWD_GETCWD(cwd, MAXPATHLEN); -+		if (!result) { -+			cwd[0] = '\0'; -+		} -+#ifdef PHP_WIN32 -+		if (IS_SLASH(*pattern)) { -+			cwd[2] = '\0'; -+		} -+#endif -+		cwd_skip = strlen(cwd)+1; -+ -+		snprintf(work_pattern, MAXPATHLEN, "%s%c%s", cwd, DEFAULT_SLASH, pattern); -+		pattern = work_pattern; -+	} -+#endif -+ -+	globbuf.gl_offs = 0; -+	if (0 != (ret = php_glob(pattern, flags & PHP_GLOB_FLAGMASK, NULL, &globbuf))) { -+#ifdef PHP_GLOB_NOMATCH -+		if (PHP_GLOB_NOMATCH == ret) { -+			/* Some glob implementation simply return no data if no matches -+			   were found, others return the PHP_GLOB_NOMATCH error code. -+			   We don't want to treat PHP_GLOB_NOMATCH as an error condition -+			   so that PHP glob() behaves the same on both types of -+			   implementations and so that 'foreach (glob() as ...' -+			   can be used for simple glob() calls without further error -+			   checking. -+			*/ -+			array_init(return_value); -+			return 0; -+		} -+#endif -+		return 0; -+	} -+ -+	/* now catch the FreeBSD style of "no matches" */ -+	if (!globbuf.gl_pathc || !globbuf.gl_pathv) { -+		array_init(return_value); -+		return 0; -+	} -+ -+	/* we assume that any glob pattern will match files from one directory only -+	   so checking the dirname of the first match should be sufficient */ -+	if (ZIP_OPENBASEDIR_CHECKPATH(globbuf.gl_pathv[0])) { -+		return -1; -+	} -+ -+	array_init(return_value); -+	for (n = 0; n < globbuf.gl_pathc; n++) { -+		/* we need to do this every time since PHP_GLOB_ONLYDIR does not guarantee that -+		 * all directories will be filtered. GNU libc documentation states the -+		 * following: -+		 * If the information about the type of the file is easily available -+		 * non-directories will be rejected but no extra work will be done to -+		 * determine the information for each file. I.e., the caller must still be -+		 * able to filter directories out. -+		 */ -+		if (flags & PHP_GLOB_ONLYDIR) { -+			zend_stat_t s = {0}; -+ -+			if (0 != VCWD_STAT(globbuf.gl_pathv[n], &s)) { -+				continue; -+			} -+ -+			if (S_IFDIR != (s.st_mode & S_IFMT)) { -+				continue; -+			} -+		} -+		add_next_index_string(return_value, globbuf.gl_pathv[n]+cwd_skip); -+	} -+ -+	ret = globbuf.gl_pathc; -+	php_globfree(&globbuf); -+	return ret; -+} -+/* }}} */ -+ -+int php_zip_pcre(zend_string *regexp, char *path, int path_len, zval *return_value) /* {{{ */ -+{ -+#ifdef ZTS -+	char cwd[MAXPATHLEN]; -+	char work_path[MAXPATHLEN]; -+	char *result; -+#endif -+	int files_cnt; -+	zend_string **namelist; -+	pcre2_match_context *mctx = php_pcre_mctx(); -+ -+#ifdef ZTS -+	if (!IS_ABSOLUTE_PATH(path, path_len)) { -+		result = VCWD_GETCWD(cwd, MAXPATHLEN); -+		if (!result) { -+			cwd[0] = '\0'; -+		} -+#ifdef PHP_WIN32 -+		if (IS_SLASH(*path)) { -+			cwd[2] = '\0'; -+		} -+#endif -+		snprintf(work_path, MAXPATHLEN, "%s%c%s", cwd, DEFAULT_SLASH, path); -+		path = work_path; -+	} -+#endif -+ -+	if (ZIP_OPENBASEDIR_CHECKPATH(path)) { -+		return -1; -+	} -+ -+	files_cnt = php_stream_scandir(path, &namelist, NULL, (void *) php_stream_dirent_alphasort); -+ -+	if (files_cnt > 0) { -+		pcre2_code *re = NULL; -+		pcre2_match_data *match_data = NULL; -+		uint32_t i, capture_count; -+		int rc; -+ -+		re = pcre_get_compiled_regex(regexp, &capture_count); -+		if (!re) { -+			for (i = 0; i < files_cnt; i++) { -+				zend_string_release_ex(namelist[i], 0); -+			} -+			efree(namelist); -+			php_error_docref(NULL, E_WARNING, "Invalid expression"); -+			return -1; -+		} -+ -+		array_init(return_value); -+ -+		/* only the files, directories are ignored */ -+		for (i = 0; i < files_cnt; i++) { -+			zend_stat_t s = {0}; -+			char   fullpath[MAXPATHLEN]; -+			size_t    namelist_len = ZSTR_LEN(namelist[i]); -+ -+			if ((namelist_len == 1 && ZSTR_VAL(namelist[i])[0] == '.') || -+				(namelist_len == 2 && ZSTR_VAL(namelist[i])[0] == '.' && ZSTR_VAL(namelist[i])[1] == '.')) { -+				zend_string_release_ex(namelist[i], 0); -+				continue; -+			} -+ -+			if ((path_len + namelist_len + 1) >= MAXPATHLEN) { -+				php_error_docref(NULL, E_WARNING, "add_path string too long (max: %u, %zu given)", -+						MAXPATHLEN - 1, (path_len + namelist_len + 1)); -+				zend_string_release_ex(namelist[i], 0); -+				break; -+			} -+ -+			match_data = php_pcre_create_match_data(capture_count, re); -+			if (!match_data) { -+				/* Allocation failed, but can proceed to the next pattern. */ -+				zend_string_release_ex(namelist[i], 0); -+				continue; -+			} -+			rc = pcre2_match(re, (PCRE2_SPTR)ZSTR_VAL(namelist[i]), ZSTR_LEN(namelist[i]), 0, 0, match_data, mctx); -+			php_pcre_free_match_data(match_data); -+			/* 0 means that the vector is too small to hold all the captured substring offsets */ -+			if (rc < 0) { -+				zend_string_release_ex(namelist[i], 0); -+				continue; -+			} -+ -+			snprintf(fullpath, MAXPATHLEN, "%s%c%s", path, DEFAULT_SLASH, ZSTR_VAL(namelist[i])); -+ -+			if (0 != VCWD_STAT(fullpath, &s)) { -+				php_error_docref(NULL, E_WARNING, "Cannot read <%s>", fullpath); -+				zend_string_release_ex(namelist[i], 0); -+				continue; -+			} -+ -+			if (S_IFDIR == (s.st_mode & S_IFMT)) { -+				zend_string_release_ex(namelist[i], 0); -+				continue; -+			} -+ -+			add_next_index_string(return_value, fullpath); -+			zend_string_release_ex(namelist[i], 0); -+		} -+		efree(namelist); -+	} -+	return files_cnt; -+} -+/* }}} */ -+ -+/* {{{ ZE2 OO definitions */ -+static zend_class_entry *zip_class_entry; -+static zend_object_handlers zip_object_handlers; -+ -+static HashTable zip_prop_handlers; -+ -+typedef zend_long (*zip_read_int_t)(ze_zip_object *obj); -+typedef char *(*zip_read_const_char_t)(ze_zip_object *obj, int *len); -+ -+typedef struct _zip_prop_handler { -+	zip_read_int_t read_int_func; -+	zip_read_const_char_t read_const_char_func; -+ -+	int type; -+} zip_prop_handler; -+/* }}} */ -+ -+static void php_zip_register_prop_handler(HashTable *prop_handler, char *name, zip_read_int_t read_int_func, zip_read_const_char_t read_char_func, int rettype) /* {{{ */ -+{ -+	zip_prop_handler hnd; -+	zend_string *str; -+ -+	hnd.read_const_char_func = read_char_func; -+	hnd.read_int_func = read_int_func; -+	hnd.type = rettype; -+	str = zend_string_init_interned(name, strlen(name), 1); -+	zend_hash_add_mem(prop_handler, str, &hnd, sizeof(zip_prop_handler)); -+	zend_string_release_ex(str, 1); -+} -+/* }}} */ -+ -+static zval *php_zip_property_reader(ze_zip_object *obj, zip_prop_handler *hnd, zval *rv) /* {{{ */ -+{ -+	const char *retchar = NULL; -+	zend_long retint = 0; -+	int len = 0; -+ -+	if (hnd->read_const_char_func) { -+		retchar = hnd->read_const_char_func(obj, &len); -+	} else if (hnd->read_int_func) { -+		retint = hnd->read_int_func(obj); -+	} -+ -+	switch (hnd->type) { -+		case IS_STRING: -+			if (retchar) { -+				ZVAL_STRINGL(rv, (char *) retchar, len); -+			} else { -+				ZVAL_EMPTY_STRING(rv); -+			} -+			break; -+		case IS_LONG: -+			ZVAL_LONG(rv, retint); -+			break; -+		default: -+			ZVAL_NULL(rv); -+	} -+ -+	return rv; -+} -+/* }}} */ -+ -+static zval *php_zip_get_property_ptr_ptr(zend_object *object, zend_string *name, int type, void **cache_slot) /* {{{ */ -+{ -+	ze_zip_object *obj; -+	zval *retval = NULL; -+	zip_prop_handler *hnd = NULL; -+ -+	obj = php_zip_fetch_object(object); -+ -+	if (obj->prop_handler != NULL) { -+		hnd = zend_hash_find_ptr(obj->prop_handler, name); -+	} -+ -+	if (hnd == NULL) { -+		retval = zend_std_get_property_ptr_ptr(object, name, type, cache_slot); -+	} else if (cache_slot) { -+		cache_slot[0] = cache_slot[1] = cache_slot[2] = NULL; -+	} -+ -+	return retval; -+} -+/* }}} */ -+ -+ -+static zval *php_zip_write_property(zend_object *object, zend_string *name, zval *value, void **cache_slot) -+{ -+	ze_zip_object *obj; -+	zip_prop_handler *hnd = NULL; -+ -+	obj = php_zip_fetch_object(object); -+ -+	if (obj->prop_handler != NULL) { -+		hnd = zend_hash_find_ptr(obj->prop_handler, name); -+	} -+ -+	if (hnd != NULL) { -+		zend_throw_error(NULL, "Cannot write read-only property %s::$%s", ZSTR_VAL(object->ce->name), ZSTR_VAL(name)); -+		return &EG(error_zval); -+	} -+ -+	return zend_std_write_property(object, name, value, cache_slot); -+} -+ -+static zval *php_zip_read_property(zend_object *object, zend_string *name, int type, void **cache_slot, zval *rv) /* {{{ */ -+{ -+	ze_zip_object *obj; -+	zval *retval = NULL; -+	zip_prop_handler *hnd = NULL; -+ -+	obj = php_zip_fetch_object(object); -+ -+	if (obj->prop_handler != NULL) { -+		hnd = zend_hash_find_ptr(obj->prop_handler, name); -+	} -+ -+	if (hnd != NULL) { -+		retval = php_zip_property_reader(obj, hnd, rv); -+		if (retval == NULL) { -+			retval = &EG(uninitialized_zval); -+		} -+	} else { -+		retval = zend_std_read_property(object, name, type, cache_slot, rv); -+	} -+ -+	return retval; -+} -+/* }}} */ -+ -+// todo: make php_zip_has_property return bool as well -+static int php_zip_has_property(zend_object *object, zend_string *name, int type, void **cache_slot) /* {{{ */ -+{ -+	ze_zip_object *obj; -+	zip_prop_handler *hnd = NULL; -+	bool retval = false; -+ -+	obj = php_zip_fetch_object(object); -+ -+	if (obj->prop_handler != NULL) { -+		hnd = zend_hash_find_ptr(obj->prop_handler, name); -+	} -+ -+	if (hnd != NULL) { -+		zval tmp, *prop; -+ -+		if (type == 2) { -+			retval = true; -+		} else if ((prop = php_zip_property_reader(obj, hnd, &tmp)) != NULL) { -+			if (type == 1) { -+				retval = zend_is_true(&tmp); -+			} else if (type == 0) { -+				retval = (Z_TYPE(tmp) != IS_NULL); -+			} -+		} -+ -+		zval_ptr_dtor(&tmp); -+	} else { -+		retval = zend_std_has_property(object, name, type, cache_slot); -+	} -+ -+	return retval; -+} -+/* }}} */ -+ -+static HashTable *php_zip_get_gc(zend_object *object, zval **gc_data, int *gc_data_count) /* {{{ */ -+{ -+	*gc_data = NULL; -+	*gc_data_count = 0; -+	return zend_std_get_properties(object); -+} -+/* }}} */ -+ -+static HashTable *php_zip_get_properties(zend_object *object)/* {{{ */ -+{ -+	ze_zip_object *obj; -+	HashTable *props; -+	zip_prop_handler *hnd; -+	zend_string *key; -+ -+	obj = php_zip_fetch_object(object); -+	props = zend_std_get_properties(object); -+ -+	if (obj->prop_handler == NULL) { -+		return NULL; -+	} -+ -+	ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(obj->prop_handler, key, hnd) { -+		zval *ret, val; -+		ret = php_zip_property_reader(obj, hnd, &val); -+		if (ret == NULL) { -+			ret = &EG(uninitialized_zval); -+		} -+		zend_hash_update(props, key, ret); -+	} ZEND_HASH_FOREACH_END(); -+ -+	return props; -+} -+/* }}} */ -+ -+#ifdef HAVE_PROGRESS_CALLBACK -+static void php_zip_progress_callback_free(void *ptr) -+{ -+	ze_zip_object *obj = ptr; -+ -+	if (ZEND_FCC_INITIALIZED(obj->progress_callback)) { -+		zend_fcc_dtor(&obj->progress_callback); -+	} -+} -+#endif -+ -+#ifdef HAVE_CANCEL_CALLBACK -+static void php_zip_cancel_callback_free(void *ptr) -+{ -+	ze_zip_object *obj = ptr; -+ -+	if (ZEND_FCC_INITIALIZED(obj->cancel_callback)) { -+		zend_fcc_dtor(&obj->cancel_callback); -+	} -+} -+#endif -+ -+static void php_zip_object_free_storage(zend_object *object) /* {{{ */ -+{ -+	ze_zip_object * intern = php_zip_fetch_object(object); -+	int i; -+ -+	if (intern->za) { -+		if (zip_close(intern->za) != 0) { -+			php_error_docref(NULL, E_WARNING, "Cannot destroy the zip context: %s", zip_strerror(intern->za)); -+			zip_discard(intern->za); -+		} -+	} -+ -+	if (intern->buffers_cnt>0) { -+		for (i=0; i<intern->buffers_cnt; i++) { -+			efree(intern->buffers[i]); -+		} -+		efree(intern->buffers); -+	} -+ -+#ifdef HAVE_PROGRESS_CALLBACK -+	/* if not properly called by libzip */ -+	php_zip_progress_callback_free(intern); -+#endif -+ -+#ifdef HAVE_CANCEL_CALLBACK -+	/* if not properly called by libzip */ -+	php_zip_cancel_callback_free(intern); -+#endif -+ -+	intern->za = NULL; -+	zend_object_std_dtor(&intern->zo); -+ -+	if (intern->filename) { -+		efree(intern->filename); -+	} -+} -+/* }}} */ -+ -+static zend_object *php_zip_object_new(zend_class_entry *class_type) /* {{{ */ -+{ -+	ze_zip_object *intern; -+ -+	intern = zend_object_alloc(sizeof(ze_zip_object), class_type); -+	intern->prop_handler = &zip_prop_handlers; -+	zend_object_std_init(&intern->zo, class_type); -+	object_properties_init(&intern->zo, class_type); -+	intern->last_id = -1; -+ -+	return &intern->zo; -+} -+/* }}} */ -+ -+/* {{{ Resource dtors */ -+ -+/* {{{ php_zip_free_dir */ -+static void php_zip_free_dir(zend_resource *rsrc) -+{ -+	zip_rsrc * zip_int = (zip_rsrc *) rsrc->ptr; -+ -+	if (zip_int) { -+		if (zip_int->za) { -+			if (zip_close(zip_int->za) != 0) { -+				php_error_docref(NULL, E_WARNING, "Cannot destroy the zip context"); -+			} -+			zip_int->za = NULL; -+		} -+ -+		efree(rsrc->ptr); -+ -+		rsrc->ptr = NULL; -+	} -+} -+/* }}} */ -+ -+/* {{{ php_zip_free_entry */ -+static void php_zip_free_entry(zend_resource *rsrc) -+{ -+	zip_read_rsrc *zr_rsrc = (zip_read_rsrc *) rsrc->ptr; -+ -+	if (zr_rsrc) { -+		if (zr_rsrc->zf) { -+			zip_fclose(zr_rsrc->zf); -+			zr_rsrc->zf = NULL; -+		} -+		efree(zr_rsrc); -+		rsrc->ptr = NULL; -+	} -+} -+/* }}} */ -+ -+/* }}}*/ -+ -+/* reset macro */ -+ -+/* {{{ function prototypes */ -+static PHP_MINIT_FUNCTION(zip); -+static PHP_MSHUTDOWN_FUNCTION(zip); -+static PHP_MINFO_FUNCTION(zip); -+/* }}} */ -+ -+static const zend_module_dep zip_deps[] = { -+	ZEND_MOD_REQUIRED("pcre") -+	ZEND_MOD_END -+}; -+ -+/* {{{ zip_module_entry */ -+zend_module_entry zip_module_entry = { -+	STANDARD_MODULE_HEADER_EX, NULL, -+	zip_deps, -+	"zip", -+	ext_functions, -+	PHP_MINIT(zip), -+	PHP_MSHUTDOWN(zip), -+	NULL, -+	NULL, -+	PHP_MINFO(zip), -+	PHP_ZIP_VERSION, -+	STANDARD_MODULE_PROPERTIES -+}; -+/* }}} */ -+ -+#ifdef COMPILE_DL_ZIP -+ZEND_GET_MODULE(zip) -+#endif -+/* set macro */ -+ -+/* {{{ Create new zip using source uri for output */ -+PHP_FUNCTION(zip_open) -+{ -+	char resolved_path[MAXPATHLEN + 1]; -+	zip_rsrc *rsrc_int; -+	int err = 0; -+	zend_string *filename; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "P", &filename) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	if (ZSTR_LEN(filename) == 0) { -+		zend_argument_must_not_be_empty_error(1); -+		RETURN_THROWS(); -+	} -+ -+	if (ZIP_OPENBASEDIR_CHECKPATH(ZSTR_VAL(filename))) { -+		RETURN_FALSE; -+	} -+ -+	if(!expand_filepath(ZSTR_VAL(filename), resolved_path)) { -+		php_error_docref(NULL, E_WARNING, "No such file or directory"); -+		RETURN_FALSE; -+	} -+ -+	rsrc_int = (zip_rsrc *)emalloc(sizeof(zip_rsrc)); -+ -+	rsrc_int->za = zip_open(resolved_path, 0, &err); -+	if (rsrc_int->za == NULL) { -+		efree(rsrc_int); -+		RETURN_LONG((zend_long)err); -+	} -+ -+	rsrc_int->index_current = 0; -+	rsrc_int->num_files = zip_get_num_entries(rsrc_int->za, 0); -+ -+	RETURN_RES(zend_register_resource(rsrc_int, le_zip_dir)); -+} -+/* }}} */ -+ -+/* {{{ Close a Zip archive */ -+PHP_FUNCTION(zip_close) -+{ -+	zval * zip; -+	zip_rsrc *z_rsrc = NULL; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &zip) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	if ((z_rsrc = (zip_rsrc *)zend_fetch_resource(Z_RES_P(zip), le_zip_dir_name, le_zip_dir)) == NULL) { -+		RETURN_THROWS(); -+	} -+ -+	/* really close the zip will break BC :-D */ -+	zend_list_close(Z_RES_P(zip)); -+} -+/* }}} */ -+ -+/* {{{ Returns the next file in the archive */ -+PHP_FUNCTION(zip_read) -+{ -+	zval *zip_dp; -+	zip_read_rsrc *zr_rsrc; -+	int ret; -+	zip_rsrc *rsrc_int; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &zip_dp) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	if ((rsrc_int = (zip_rsrc *)zend_fetch_resource(Z_RES_P(zip_dp), le_zip_dir_name, le_zip_dir)) == NULL) { -+		RETURN_THROWS(); -+	} -+ -+	if (rsrc_int && rsrc_int->za) { -+		if (rsrc_int->index_current >= rsrc_int->num_files) { -+			RETURN_FALSE; -+		} -+ -+		zr_rsrc = emalloc(sizeof(zip_read_rsrc)); -+ -+		ret = zip_stat_index(rsrc_int->za, rsrc_int->index_current, 0, &zr_rsrc->sb); -+ -+		if (ret != 0) { -+			efree(zr_rsrc); -+			RETURN_FALSE; -+		} -+ -+		zr_rsrc->zip_rsrc_handle = Z_RES_P(zip_dp)->handle; -+		zr_rsrc->zf = zip_fopen_index(rsrc_int->za, rsrc_int->index_current, 0); -+		if (zr_rsrc->zf) { -+			rsrc_int->index_current++; -+			RETURN_RES(zend_register_resource(zr_rsrc, le_zip_entry)); -+		} else { -+			efree(zr_rsrc); -+			RETURN_FALSE; -+		} -+ -+	} else { -+		RETURN_FALSE; -+	} -+} -+/* }}} */ -+ -+/* {{{ Open a Zip File, pointed by the resource entry */ -+/* Dummy function to follow the old API */ -+PHP_FUNCTION(zip_entry_open) -+{ -+	zval * zip; -+	zval * zip_entry; -+	char *mode = NULL; -+	size_t mode_len = 0; -+	zip_read_rsrc * zr_rsrc; -+	zip_rsrc *z_rsrc; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "rr|s", &zip, &zip_entry, &mode, &mode_len) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	if ((zr_rsrc = (zip_read_rsrc *)zend_fetch_resource(Z_RES_P(zip_entry), le_zip_entry_name, le_zip_entry)) == NULL) { -+		RETURN_THROWS(); -+	} -+ -+	if ((z_rsrc = (zip_rsrc *)zend_fetch_resource(Z_RES_P(zip), le_zip_dir_name, le_zip_dir)) == NULL) { -+		RETURN_THROWS(); -+	} -+ -+	if (zr_rsrc->zf != NULL) { -+		RETURN_TRUE; -+	} else { -+		RETURN_FALSE; -+	} -+} -+/* }}} */ -+ -+/* {{{ Close a zip entry */ -+PHP_FUNCTION(zip_entry_close) -+{ -+	zval * zip_entry; -+	zip_read_rsrc * zr_rsrc; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &zip_entry) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	if ((zr_rsrc = (zip_read_rsrc *)zend_fetch_resource(Z_RES_P(zip_entry), le_zip_entry_name, le_zip_entry)) == NULL) { -+		RETURN_THROWS(); -+	} -+ -+	zend_list_close(Z_RES_P(zip_entry)); -+	RETURN_TRUE; -+} -+/* }}} */ -+ -+/* {{{ Read from an open directory entry */ -+PHP_FUNCTION(zip_entry_read) -+{ -+	zval * zip_entry; -+	zend_long len = 0; -+	zip_read_rsrc * zr_rsrc; -+	zend_string *buffer; -+	int n = 0; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "r|l", &zip_entry, &len) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	if ((zr_rsrc = (zip_read_rsrc *)zend_fetch_resource(Z_RES_P(zip_entry), le_zip_entry_name, le_zip_entry)) == NULL) { -+		RETURN_THROWS(); -+	} -+ -+	if (len <= 0) { -+		len = 1024; -+	} -+ -+	if (zr_rsrc->zf) { -+		buffer = zend_string_safe_alloc(1, len, 0, 0); -+		n = zip_fread(zr_rsrc->zf, ZSTR_VAL(buffer), ZSTR_LEN(buffer)); -+		if (n > 0) { -+			ZSTR_VAL(buffer)[n] = '\0'; -+			ZSTR_LEN(buffer) = n; -+			RETURN_NEW_STR(buffer); -+		} else { -+			zend_string_efree(buffer); -+			RETURN_EMPTY_STRING(); -+		} -+	} else { -+		RETURN_FALSE; -+	} -+} -+/* }}} */ -+ -+static void php_zip_entry_get_info(INTERNAL_FUNCTION_PARAMETERS, int opt) /* {{{ */ -+{ -+	zval * zip_entry; -+	zip_read_rsrc * zr_rsrc; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "r", &zip_entry) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	if ((zr_rsrc = (zip_read_rsrc *)zend_fetch_resource(Z_RES_P(zip_entry), le_zip_entry_name, le_zip_entry)) == NULL) { -+		RETURN_THROWS(); -+	} -+ -+	if (!zr_rsrc->zf || !zend_hash_index_exists(&EG(regular_list), zr_rsrc->zip_rsrc_handle)) { -+		RETURN_FALSE; -+	} -+ -+	switch (opt) { -+		case 0: -+			RETURN_STRING((char *)zr_rsrc->sb.name); -+		case 1: -+			RETURN_LONG((zend_long) (zr_rsrc->sb.comp_size)); -+		case 2: -+			RETURN_LONG((zend_long) (zr_rsrc->sb.size)); -+		case 3: -+			switch (zr_rsrc->sb.comp_method) { -+				case 0: -+					RETURN_STRING("stored"); -+				case 1: -+					RETURN_STRING("shrunk"); -+				case 2: -+				case 3: -+				case 4: -+				case 5: -+					RETURN_STRING("reduced"); -+				case 6: -+					RETURN_STRING("imploded"); -+				case 7: -+					RETURN_STRING("tokenized"); -+					break; -+				case 8: -+					RETURN_STRING("deflated"); -+				case 9: -+					RETURN_STRING("deflatedX"); -+					break; -+				case 10: -+					RETURN_STRING("implodedX"); -+				default: -+					RETURN_FALSE; -+			} -+	} -+ -+} -+/* }}} */ -+ -+/* {{{ Return the name given a ZZip entry */ -+PHP_FUNCTION(zip_entry_name) -+{ -+	php_zip_entry_get_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -+} -+/* }}} */ -+ -+/* {{{ Return the compressed size of a ZZip entry */ -+PHP_FUNCTION(zip_entry_compressedsize) -+{ -+	php_zip_entry_get_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -+} -+/* }}} */ -+ -+/* {{{ Return the actual filesize of a ZZip entry */ -+PHP_FUNCTION(zip_entry_filesize) -+{ -+	php_zip_entry_get_info(INTERNAL_FUNCTION_PARAM_PASSTHRU, 2); -+} -+/* }}} */ -+ -+/* {{{ 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); -+} -+/* }}} */ -+ -+/* {{{ Create new zip using source uri for output, return TRUE on success or the error code */ -+PHP_METHOD(ZipArchive, open) -+{ -+	struct zip *intern; -+	int err = 0; -+	zend_long flags = 0; -+	char *resolved_path; -+	zend_string *filename; -+	zval *self = ZEND_THIS; -+	ze_zip_object *ze_obj; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|l", &filename, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	/* We do not use ZIP_FROM_OBJECT, zip init function here */ -+	ze_obj = Z_ZIP_P(self); -+ -+	if (ZSTR_LEN(filename) == 0) { -+		zend_argument_must_not_be_empty_error(1); -+		RETURN_THROWS(); -+	} -+ -+	if (ZIP_OPENBASEDIR_CHECKPATH(ZSTR_VAL(filename))) { -+		RETURN_FALSE; -+	} -+ -+	if (!(resolved_path = expand_filepath(ZSTR_VAL(filename), NULL))) { -+		php_error_docref(NULL, E_WARNING, "No such file or directory"); -+		RETURN_FALSE; -+	} -+ -+	if (ze_obj->za) { -+		/* we already have an opened zip, free it */ -+		if (zip_close(ze_obj->za) != 0) { -+			php_error_docref(NULL, E_WARNING, "Empty string as source"); -+			efree(resolved_path); -+			RETURN_FALSE; -+		} -+		ze_obj->za = NULL; -+	} -+	if (ze_obj->filename) { -+		efree(ze_obj->filename); -+		ze_obj->filename = NULL; -+	} -+ -+	/* 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 = {0}; -+ -+		/* 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; -+		} -+	} -+ -+	intern = zip_open(resolved_path, flags, &err); -+	if (!intern || err) { -+		efree(resolved_path); -+		RETURN_LONG((zend_long)err); -+	} -+	ze_obj->filename = resolved_path; -+	ze_obj->filename_len = strlen(resolved_path); -+	ze_obj->za = intern; -+	RETURN_TRUE; -+} -+/* }}} */ -+ -+/* {{{ Set the password for the active archive */ -+PHP_METHOD(ZipArchive, setPassword) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	char *password; -+	size_t	password_len; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &password, &password_len) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (password_len < 1) { -+		RETURN_FALSE; -+	} -+ -+	int res = zip_set_default_password(intern, (const char *)password); -+	if (res == 0) { -+		RETURN_TRUE; -+	} else { -+		RETURN_FALSE; -+	} -+} -+/* }}} */ -+ -+/* {{{ close the zip archive */ -+PHP_METHOD(ZipArchive, close) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	ze_zip_object *ze_obj; -+	int err; -+ -+	if (zend_parse_parameters_none() == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	ze_obj = Z_ZIP_P(self); -+ -+	err = zip_close(intern); -+	if (err) { -+		php_error_docref(NULL, E_WARNING, "%s", zip_strerror(intern)); -+		/* Save error for property reader */ -+		#if LIBZIP_VERSION_MAJOR < 1 -+			zip_error_get(intern, &ze_obj->err_zip, &ze_obj->err_sys); -+		#else -+			{ -+			zip_error_t *ziperr; -+ -+			ziperr = zip_get_error(intern); -+			ze_obj->err_zip = zip_error_code_zip(ziperr); -+			ze_obj->err_sys = zip_error_code_system(ziperr); -+			zip_error_fini(ziperr); -+			} -+		#endif -+		zip_discard(intern); -+	} else { -+		ze_obj->err_zip = 0; -+		ze_obj->err_sys = 0; -+	} -+ -+	/* clear cache as empty zip are not created but deleted */ -+	php_clear_stat_cache(1, ze_obj->filename, ze_obj->filename_len); -+ -+	efree(ze_obj->filename); -+	ze_obj->filename = NULL; -+	ze_obj->filename_len = 0; -+	ze_obj->za = NULL; -+ -+	if (!err) { -+		RETURN_TRUE; -+	} else { -+		RETURN_FALSE; -+	} -+} -+/* }}} */ -+ -+/* {{{ close the zip archive */ -+PHP_METHOD(ZipArchive, count) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zip_int64_t num; -+ -+	if (zend_parse_parameters_none() == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	num = zip_get_num_entries(intern, 0); -+	RETVAL_LONG(MIN(num, ZEND_LONG_MAX)); -+} -+/* }}} */ -+ -+/* {{{ clear the internal status */ -+PHP_METHOD(ZipArchive, clearError) -+{ -+	zval *self = ZEND_THIS; -+	ze_zip_object *ze_obj; -+ -+	if (zend_parse_parameters_none() == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ze_obj = Z_ZIP_P(self); /* not ZIP_FROM_OBJECT as we can use saved error after close */ -+	if (ze_obj->za) { -+		zip_error_clear(ze_obj->za); -+	} else { -+		ze_obj->err_zip = 0; -+		ze_obj->err_sys = 0; -+	} -+} -+/* }}} */ -+ -+/* {{{ Returns the status error message, system and/or zip messages */ -+PHP_METHOD(ZipArchive, getStatusString) -+{ -+	zval *self = ZEND_THIS; -+#if LIBZIP_VERSION_MAJOR < 1 -+	int zep, syp, len; -+	char error_string[128]; -+#endif -+	ze_zip_object *ze_obj; -+ -+	if (zend_parse_parameters_none() == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ze_obj = Z_ZIP_P(self); /* not ZIP_FROM_OBJECT as we can use saved error after close */ -+ -+#if LIBZIP_VERSION_MAJOR < 1 -+	if (ze_obj->za) { -+		zip_error_get(ze_obj->za, &zep, &syp); -+		len = zip_error_to_str(error_string, 128, zep, syp); -+	} else { -+		len = zip_error_to_str(error_string, 128, ze_obj->err_zip, ze_obj->err_sys); -+	} -+	RETVAL_STRINGL(error_string, len); -+#else -+	if (ze_obj->za) { -+		zip_error_t *err; -+ -+		err = zip_get_error(ze_obj->za); -+		RETVAL_STRING(zip_error_strerror(err)); -+		zip_error_fini(err); -+	} else { -+		zip_error_t err; -+ -+		zip_error_init(&err); -+		zip_error_set(&err, ze_obj->err_zip, ze_obj->err_sys); -+		RETVAL_STRING(zip_error_strerror(&err)); -+		zip_error_fini(&err); -+	} -+#endif -+} -+/* }}} */ -+ -+/* {{{ Returns the index of the entry named filename in the archive */ -+PHP_METHOD(ZipArchive, addEmptyDir) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	char *dirname; -+	size_t   dirname_len; -+	char *s; -+	zend_long flags = 0; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|l", -+				&dirname, &dirname_len, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (dirname_len<1) { -+		RETURN_FALSE; -+	} -+ -+	if (dirname[dirname_len-1] != '/') { -+		s=(char *)safe_emalloc(dirname_len, 1, 2); -+		strcpy(s, dirname); -+		s[dirname_len] = '/'; -+		s[dirname_len+1] = '\0'; -+	} else { -+		s = dirname; -+	} -+ -+	if ((Z_ZIP_P(self)->last_id = zip_dir_add(intern, (const char *)s, flags)) == -1) { -+		RETVAL_FALSE; -+	} else { -+		zip_error_clear(intern); -+		RETVAL_TRUE; -+	} -+ -+	if (s != dirname) { -+		efree(s); -+	} -+} -+/* }}} */ -+ -+static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */ -+{ -+	zval *self = ZEND_THIS; -+	char *path = "."; -+	size_t  path_len = 1; -+	zend_long glob_flags = 0; -+	HashTable *options = NULL; -+	zip_options opts = {0}; -+	int found; -+	zend_string *pattern; -+ -+	/* 1 == glob, 2 == pcre */ -+	if (type == 1) { -+		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|sh", -+					&pattern, &path, &path_len, &options) == FAILURE) { -+			RETURN_THROWS(); -+		} -+	} -+ -+	if (ZSTR_LEN(pattern) == 0) { -+		zend_argument_must_not_be_empty_error(1); -+		RETURN_THROWS(); -+	} -+	if (options && zend_hash_num_elements(options) > 0 && (php_zip_parse_options(options, &opts) < 0)) { -+		RETURN_THROWS(); -+	} -+ -+	if (type == 1) { -+		found = php_zip_glob(ZSTR_VAL(pattern), ZSTR_LEN(pattern), glob_flags, return_value); -+	} else { -+		found = php_zip_pcre(pattern, path, path_len, return_value); -+	} -+ -+	if (found > 0) { -+		int i; -+		zval *zval_file; -+		ze_zip_object *ze_obj; -+ -+		ze_obj = Z_ZIP_P(self); -+ -+		for (i = 0; i < found; i++) { -+			char *file_stripped, *entry_name; -+			size_t entry_name_len, file_stripped_len; -+			char entry_name_buf[MAXPATHLEN]; -+			zend_string *basename = NULL; -+ -+			if ((zval_file = zend_hash_index_find(Z_ARRVAL_P(return_value), i)) != NULL) { -+				if (opts.remove_all_path) { -+					basename = php_basename(Z_STRVAL_P(zval_file), Z_STRLEN_P(zval_file), NULL, 0); -+					file_stripped = ZSTR_VAL(basename); -+					file_stripped_len = ZSTR_LEN(basename); -+				} else if (opts.remove_path && !memcmp(Z_STRVAL_P(zval_file), opts.remove_path, opts.remove_path_len)) { -+					if (IS_SLASH(Z_STRVAL_P(zval_file)[opts.remove_path_len])) { -+						file_stripped = Z_STRVAL_P(zval_file) + opts.remove_path_len + 1; -+						file_stripped_len = Z_STRLEN_P(zval_file) - opts.remove_path_len - 1; -+					} else { -+						file_stripped = Z_STRVAL_P(zval_file) + opts.remove_path_len; -+						file_stripped_len = Z_STRLEN_P(zval_file) - opts.remove_path_len; -+					} -+				} else { -+					file_stripped = Z_STRVAL_P(zval_file); -+					file_stripped_len = Z_STRLEN_P(zval_file); -+				} -+ -+				if (opts.add_path) { -+					if ((opts.add_path_len + file_stripped_len) > MAXPATHLEN) { -+						if (basename) { -+							zend_string_release_ex(basename, 0); -+						} -+						php_error_docref(NULL, E_WARNING, "Entry name too long (max: %d, %zd given)", -+						MAXPATHLEN - 1, (opts.add_path_len + file_stripped_len)); -+						zend_array_destroy(Z_ARR_P(return_value)); -+						RETURN_FALSE; -+					} -+					snprintf(entry_name_buf, MAXPATHLEN, "%s%s", opts.add_path, file_stripped); -+				} else { -+					snprintf(entry_name_buf, MAXPATHLEN, "%s", file_stripped); -+				} -+ -+				entry_name = entry_name_buf; -+				entry_name_len = strlen(entry_name); -+				if (basename) { -+					zend_string_release_ex(basename, 0); -+					basename = NULL; -+				} -+ -+				if (php_zip_add_file(ze_obj, Z_STRVAL_P(zval_file), Z_STRLEN_P(zval_file), -+					entry_name, entry_name_len, 0, 0, -1, opts.flags) < 0) { -+					zend_array_destroy(Z_ARR_P(return_value)); -+					RETURN_FALSE; -+				} -+				if (opts.comp_method >= 0) { -+					if (zip_set_file_compression(ze_obj->za, ze_obj->last_id, opts.comp_method, opts.comp_flags)) { -+						zend_array_destroy(Z_ARR_P(return_value)); -+						RETURN_FALSE; -+					} -+				} -+#ifdef HAVE_ENCRYPTION -+				if (opts.enc_method >= 0) { -+					if (zip_file_set_encryption(ze_obj->za, ze_obj->last_id, opts.enc_method, opts.enc_password)) { -+						zend_array_destroy(Z_ARR_P(return_value)); -+						RETURN_FALSE; -+					} -+				} -+#endif -+			} -+		} -+	} else if (found == 0) { -+		RETURN_EMPTY_ARRAY(); -+	} else { -+		RETURN_FALSE; -+	} -+} -+/* }}} */ -+ -+/* {{{ 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); -+} -+/* }}} */ -+ -+/* {{{ 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); -+} -+/* }}} */ -+ -+/* {{{ Add a file in a Zip archive using its path and the name to use. */ -+PHP_METHOD(ZipArchive, addFile) -+{ -+	zval *self = ZEND_THIS; -+	char *entry_name = NULL; -+	size_t entry_name_len = 0; -+	zend_long offset_start = 0, offset_len = 0; -+	zend_string *filename; -+	zend_long flags = ZIP_FL_OVERWRITE; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|slll", -+			&filename, &entry_name, &entry_name_len, &offset_start, &offset_len, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	if (ZSTR_LEN(filename) == 0) { -+		zend_argument_must_not_be_empty_error(1); -+		RETURN_THROWS(); -+	} -+ -+	if (entry_name_len == 0) { -+		entry_name = ZSTR_VAL(filename); -+		entry_name_len = ZSTR_LEN(filename); -+	} -+ -+	if (php_zip_add_file(Z_ZIP_P(self), ZSTR_VAL(filename), ZSTR_LEN(filename), -+			entry_name, entry_name_len, offset_start, offset_len, -1, flags) < 0) { -+		RETURN_FALSE; -+	} else { -+		RETURN_TRUE; -+	} -+} -+/* }}} */ -+ -+/* {{{ Add a file in a Zip archive using its path and the name to use. */ -+PHP_METHOD(ZipArchive, replaceFile) -+{ -+	zval *self = ZEND_THIS; -+	zend_long index; -+	zend_long offset_start = 0, offset_len = 0; -+	zend_string *filename; -+	zend_long flags = 0; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "Pl|lll", -+			&filename, &index, &offset_start, &offset_len, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	if (ZSTR_LEN(filename) == 0) { -+		zend_argument_must_not_be_empty_error(1); -+		RETURN_THROWS(); -+	} -+ -+	if (index < 0) { -+		zend_argument_value_error(2, "must be greater than or equal to 0"); -+		RETURN_THROWS(); -+	} -+ -+	if (php_zip_add_file(Z_ZIP_P(self), ZSTR_VAL(filename), ZSTR_LEN(filename), -+			NULL, 0, offset_start, offset_len, index, flags) < 0) { -+		RETURN_FALSE; -+	} else { -+		RETURN_TRUE; -+	} -+} -+/* }}} */ -+ -+/* {{{ Add a file using content and the entry name */ -+PHP_METHOD(ZipArchive, addFromString) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_string *buffer; -+	char *name; -+	size_t name_len; -+	ze_zip_object *ze_obj; -+	struct zip_source *zs; -+	int pos = 0; -+	zend_long flags = ZIP_FL_OVERWRITE; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "sS|l", -+			&name, &name_len, &buffer, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	ze_obj = Z_ZIP_P(self); -+	if (ze_obj->buffers_cnt) { -+		ze_obj->buffers = (char **)safe_erealloc(ze_obj->buffers, sizeof(char *), (ze_obj->buffers_cnt+1), 0); -+		pos = ze_obj->buffers_cnt++; -+	} else { -+		ze_obj->buffers = (char **)emalloc(sizeof(char *)); -+		ze_obj->buffers_cnt++; -+		pos = 0; -+	} -+	ze_obj->buffers[pos] = (char *)safe_emalloc(ZSTR_LEN(buffer), 1, 1); -+	memcpy(ze_obj->buffers[pos], ZSTR_VAL(buffer), ZSTR_LEN(buffer) + 1); -+ -+	zs = zip_source_buffer(intern, ze_obj->buffers[pos], ZSTR_LEN(buffer), 0); -+ -+	if (zs == NULL) { -+		RETURN_FALSE; -+	} -+ -+	ze_obj->last_id = zip_file_add(intern, name, zs, flags); -+	if (ze_obj->last_id == -1) { -+		zip_source_free(zs); -+		RETURN_FALSE; -+	} else { -+		zip_error_clear(intern); -+		RETURN_TRUE; -+	} -+} -+/* }}} */ -+ -+/* {{{ Returns the information about a the zip entry filename */ -+PHP_METHOD(ZipArchive, statName) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_long flags = 0; -+	struct zip_stat sb; -+	zend_string *name; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|l", &name, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	PHP_ZIP_STAT_PATH(intern, ZSTR_VAL(name), ZSTR_LEN(name), flags, sb); -+ -+	RETURN_SB(&sb); -+} -+/* }}} */ -+ -+/* {{{ Returns the zip entry information using its index */ -+PHP_METHOD(ZipArchive, statIndex) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_long index, flags = 0; -+ -+	struct zip_stat sb; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", -+			&index, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (zip_stat_index(intern, index, flags, &sb) != 0) { -+		RETURN_FALSE; -+	} -+	RETURN_SB(&sb); -+} -+/* }}} */ -+ -+/* {{{ Returns the index of the entry named filename in the archive */ -+PHP_METHOD(ZipArchive, locateName) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_long flags = 0; -+	zend_long idx = -1; -+	zend_string *name; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|l", &name, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (ZSTR_LEN(name) < 1) { -+		RETURN_FALSE; -+	} -+ -+	idx = (zend_long)zip_name_locate(intern, (const char *)ZSTR_VAL(name), flags); -+ -+	if (idx >= 0) { -+		RETURN_LONG(idx); -+	} else { -+		RETURN_FALSE; -+	} -+} -+/* }}} */ -+ -+/* {{{ Returns the name of the file at position index */ -+PHP_METHOD(ZipArchive, getNameIndex) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	const char *name; -+	zend_long flags = 0, index = 0; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", -+			&index, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	name = zip_get_name(intern, (int) index, flags); -+ -+	if (name) { -+		RETVAL_STRING((char *)name); -+	} else { -+		RETURN_FALSE; -+	} -+} -+/* }}} */ -+ -+/* {{{ Set or remove (NULL/'') the comment of the archive */ -+PHP_METHOD(ZipArchive, setArchiveComment) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	size_t comment_len; -+	char * comment; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &comment, &comment_len) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (comment_len > 0xffff) { -+		zend_argument_value_error(1, "must be less than 65535 bytes"); -+		RETURN_THROWS(); -+	} -+ -+	if (zip_set_archive_comment(intern, (const char *)comment, comment_len)) { -+		RETURN_FALSE; -+	} else { -+		RETURN_TRUE; -+	} -+} -+/* }}} */ -+ -+/* {{{ Returns the comment of an entry using its index */ -+PHP_METHOD(ZipArchive, getArchiveComment) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_long flags = 0; -+	const char * comment; -+	int comment_len = 0; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "|l", &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	comment = zip_get_archive_comment(intern, &comment_len, (int)flags); -+	if(comment==NULL) { -+		RETURN_FALSE; -+	} -+	RETURN_STRINGL((char *)comment, (zend_long)comment_len); -+} -+/* }}} */ -+ -+PHP_METHOD(ZipArchive, setArchiveFlag) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_long flag, value; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll", &flag, &value) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (zip_set_archive_flag(intern, flag, (int)value)) { -+		RETURN_FALSE; -+	} else { -+		RETURN_TRUE; -+	} -+} -+ -+PHP_METHOD(ZipArchive, getArchiveFlag) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_long flag, flags = 0; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", &flag, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	RETURN_LONG(zip_get_archive_flag(intern, flag, flags)); -+} -+ -+/* {{{ Set or remove (NULL/'') the comment of an entry using its Name */ -+PHP_METHOD(ZipArchive, setCommentName) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	size_t comment_len, name_len; -+	char * comment, *name; -+	int idx; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", -+			&name, &name_len, &comment, &comment_len) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	if (name_len == 0) { -+		zend_argument_must_not_be_empty_error(1); -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (comment_len > 0xffff) { -+		zend_argument_value_error(2, "must be less than 65535 bytes"); -+		RETURN_THROWS(); -+	} -+ -+	idx = zip_name_locate(intern, name, 0); -+	if (idx < 0) { -+		RETURN_FALSE; -+	} -+	PHP_ZIP_SET_FILE_COMMENT(intern, idx, comment, comment_len); -+} -+/* }}} */ -+ -+/* {{{ Set or remove (NULL/'') the comment of an entry using its index */ -+PHP_METHOD(ZipArchive, setCommentIndex) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_long index; -+	size_t comment_len; -+	char * comment; -+	struct zip_stat sb; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "ls", -+			&index, &comment, &comment_len) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (comment_len > 0xffff) { -+		zend_argument_value_error(2, "must be less than 65535 bytes"); -+		RETURN_THROWS(); -+	} -+ -+	PHP_ZIP_STAT_INDEX(intern, index, 0, sb); -+	PHP_ZIP_SET_FILE_COMMENT(intern, index, comment, comment_len); -+} -+/* }}} */ -+ -+/* those constants/functions are only available in libzip since 0.11.2 */ -+#ifdef ZIP_OPSYS_DEFAULT -+ -+/* {{{ Set external attributes for file in zip, using its name */ -+PHP_METHOD(ZipArchive, setExternalAttributesName) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	size_t name_len; -+	char *name; -+	zend_long flags=0, opsys, attr; -+	zip_int64_t idx; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "sll|l", -+			&name, &name_len, &opsys, &attr, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (name_len == 0) { -+		zend_argument_must_not_be_empty_error(1); -+		RETURN_THROWS(); -+	} -+ -+	idx = zip_name_locate(intern, name, 0); -+ -+	if (idx < 0) { -+		RETURN_FALSE; -+	} -+	if (zip_file_set_external_attributes(intern, idx, (zip_flags_t)flags, -+			(zip_uint8_t)(opsys&0xff), (zip_uint32_t)attr) < 0) { -+		RETURN_FALSE; -+	} -+	RETURN_TRUE; -+} -+/* }}} */ -+ -+/* {{{ Set external attributes for file in zip, using its index */ -+PHP_METHOD(ZipArchive, setExternalAttributesIndex) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_long index, flags=0, opsys, attr; -+	struct zip_stat sb; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "lll|l", -+			&index, &opsys, &attr, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	PHP_ZIP_STAT_INDEX(intern, index, 0, sb); -+	if (zip_file_set_external_attributes(intern, (zip_uint64_t)index, -+			(zip_flags_t)flags, (zip_uint8_t)(opsys&0xff), (zip_uint32_t)attr) < 0) { -+		RETURN_FALSE; -+	} -+	RETURN_TRUE; -+} -+/* }}} */ -+ -+/* {{{ Get external attributes for file in zip, using its name */ -+PHP_METHOD(ZipArchive, getExternalAttributesName) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS, *z_opsys, *z_attr; -+	size_t name_len; -+	char *name; -+	zend_long flags=0; -+	zip_uint8_t opsys; -+	zip_uint32_t attr; -+	zip_int64_t idx; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "szz|l", -+			&name, &name_len, &z_opsys, &z_attr, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (name_len == 0) { -+		zend_argument_must_not_be_empty_error(1); -+		RETURN_THROWS(); -+	} -+ -+	idx = zip_name_locate(intern, name, 0); -+ -+	if (idx < 0) { -+		RETURN_FALSE; -+	} -+	if (zip_file_get_external_attributes(intern, idx, -+			(zip_flags_t)flags, &opsys, &attr) < 0) { -+		RETURN_FALSE; -+	} -+	ZEND_TRY_ASSIGN_REF_LONG(z_opsys, opsys); -+	ZEND_TRY_ASSIGN_REF_LONG(z_attr, attr); -+	RETURN_TRUE; -+} -+/* }}} */ -+ -+/* {{{ Get external attributes for file in zip, using its index */ -+PHP_METHOD(ZipArchive, getExternalAttributesIndex) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS, *z_opsys, *z_attr; -+	zend_long index, flags=0; -+	zip_uint8_t opsys; -+	zip_uint32_t attr; -+	struct zip_stat sb; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "lzz|l", -+			&index, &z_opsys, &z_attr, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	PHP_ZIP_STAT_INDEX(intern, index, 0, sb); -+	if (zip_file_get_external_attributes(intern, (zip_uint64_t)index, -+			(zip_flags_t)flags, &opsys, &attr) < 0) { -+		RETURN_FALSE; -+	} -+	ZEND_TRY_ASSIGN_REF_LONG(z_opsys, opsys); -+	ZEND_TRY_ASSIGN_REF_LONG(z_attr, attr); -+	RETURN_TRUE; -+} -+/* }}} */ -+#endif /* ifdef ZIP_OPSYS_DEFAULT */ -+ -+#ifdef HAVE_ENCRYPTION -+/* {{{ Set encryption method for file in zip, using its name */ -+PHP_METHOD(ZipArchive, setEncryptionName) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_long method; -+	zip_int64_t idx; -+	char *name, *password = NULL; -+	size_t name_len, password_len; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|s!", -+			&name, &name_len, &method, &password, &password_len) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (name_len == 0) { -+		zend_argument_must_not_be_empty_error(1); -+		RETURN_THROWS(); -+	} -+ -+	idx = zip_name_locate(intern, name, 0); -+ -+	if (idx < 0) { -+		RETURN_FALSE; -+	} -+ -+	if (zip_file_set_encryption(intern, idx, (zip_uint16_t)method, password)) { -+		RETURN_FALSE; -+	} -+	RETURN_TRUE; -+} -+/* }}} */ -+ -+/* {{{ Set encryption method for file in zip, using its index */ -+PHP_METHOD(ZipArchive, setEncryptionIndex) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_long index, method; -+	char *password = NULL; -+	size_t password_len; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll|s!", -+			&index, &method, &password, &password_len) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (zip_file_set_encryption(intern, index, (zip_uint16_t)method, password)) { -+		RETURN_FALSE; -+	} -+	RETURN_TRUE; -+} -+/* }}} */ -+#endif -+ -+/* {{{ Returns the comment of an entry using its name */ -+PHP_METHOD(ZipArchive, getCommentName) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	size_t name_len; -+	int idx; -+	zend_long flags = 0; -+	zip_uint32_t comment_len = 0; -+	const char * comment; -+	char *name; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|l", -+			&name, &name_len, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (name_len == 0) { -+		zend_argument_must_not_be_empty_error(1); -+		RETURN_THROWS(); -+	} -+ -+	idx = zip_name_locate(intern, name, 0); -+ -+	if (idx < 0) { -+		RETURN_FALSE; -+	} -+ -+	comment = zip_file_get_comment(intern, idx, &comment_len, (zip_flags_t)flags); -+	RETURN_STRINGL((char *)comment, comment_len); -+} -+/* }}} */ -+ -+/* {{{ Returns the comment of an entry using its index */ -+PHP_METHOD(ZipArchive, getCommentIndex) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_long index, flags = 0; -+	const char * comment; -+	zip_uint32_t comment_len = 0; -+	struct zip_stat sb; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", -+				&index, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	PHP_ZIP_STAT_INDEX(intern, index, 0, sb); -+	comment = zip_file_get_comment(intern, index, &comment_len, (zip_flags_t)flags); -+	RETURN_STRINGL((char *)comment, comment_len); -+} -+/* }}} */ -+ -+/* {{{ Set the compression of a file in zip, using its name */ -+PHP_METHOD(ZipArchive, setCompressionName) -+{ -+	struct zip *intern; -+	zval *this = ZEND_THIS; -+	size_t name_len; -+	char *name; -+	zip_int64_t idx; -+	zend_long comp_method, comp_flags = 0; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|l", -+			&name, &name_len, &comp_method, &comp_flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, this); -+ -+	if (name_len == 0) { -+		zend_argument_must_not_be_empty_error(1); -+		RETURN_THROWS(); -+	} -+ -+	idx = zip_name_locate(intern, name, 0); -+ -+	if (idx < 0) { -+		RETURN_FALSE; -+	} -+ -+	if (zip_set_file_compression(intern, (zip_uint64_t)idx, -+			(zip_int32_t)comp_method, (zip_uint32_t)comp_flags) != 0) { -+		RETURN_FALSE; -+	} -+	RETURN_TRUE; -+} -+/* }}} */ -+ -+/* {{{ Set the compression of a file in zip, using its index */ -+PHP_METHOD(ZipArchive, setCompressionIndex) -+{ -+	struct zip *intern; -+	zval *this = ZEND_THIS; -+	zend_long index; -+	zend_long comp_method, comp_flags = 0; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll|l", -+			&index, &comp_method, &comp_flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, this); -+ -+	if (zip_set_file_compression(intern, (zip_uint64_t)index, -+			(zip_int32_t)comp_method, (zip_uint32_t)comp_flags) != 0) { -+		RETURN_FALSE; -+	} -+	RETURN_TRUE; -+} -+/* }}} */ -+ -+#ifdef HAVE_SET_MTIME -+/* {{{ Set the modification time of a file in zip, using its name */ -+PHP_METHOD(ZipArchive, setMtimeName) -+{ -+	struct zip *intern; -+	zval *this = ZEND_THIS; -+	size_t name_len; -+	char *name; -+	zip_int64_t idx; -+	zend_long mtime, flags = 0; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "sl|l", -+			&name, &name_len, &mtime,  &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, this); -+ -+	if (name_len == 0) { -+		zend_argument_must_not_be_empty_error(1); -+		RETURN_THROWS(); -+	} -+ -+	idx = zip_name_locate(intern, name, 0); -+ -+	if (idx < 0) { -+		RETURN_FALSE; -+	} -+ -+	if (zip_file_set_mtime(intern, (zip_uint64_t)idx, -+			(time_t)mtime, (zip_uint32_t)flags) != 0) { -+		RETURN_FALSE; -+	} -+	RETURN_TRUE; -+} -+/* }}} */ -+ -+/* {{{ Set the modification time of a file in zip, using its index */ -+PHP_METHOD(ZipArchive, setMtimeIndex) -+{ -+	struct zip *intern; -+	zval *this = ZEND_THIS; -+	zend_long index; -+	zend_long mtime, flags = 0; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "ll|l", -+			&index, &mtime, &flags) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, this); -+ -+	if (zip_file_set_mtime(intern, (zip_uint64_t)index, -+			(time_t)mtime, (zip_uint32_t)flags) != 0) { -+		RETURN_FALSE; -+	} -+	RETURN_TRUE; -+} -+/* }}} */ -+#endif -+ -+/* {{{ Delete a file using its index */ -+PHP_METHOD(ZipArchive, deleteIndex) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_long index; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &index) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (index < 0) { -+		RETURN_FALSE; -+	} -+ -+	if (zip_delete(intern, index) < 0) { -+		RETURN_FALSE; -+	} -+ -+	RETURN_TRUE; -+} -+/* }}} */ -+ -+/* {{{ Delete a file using its index */ -+PHP_METHOD(ZipArchive, deleteName) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	size_t name_len; -+	char *name; -+	struct zip_stat sb; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name, &name_len) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (name_len < 1) { -+		RETURN_FALSE; -+	} -+ -+	PHP_ZIP_STAT_PATH(intern, name, name_len, 0, sb); -+	if (zip_delete(intern, sb.index)) { -+		RETURN_FALSE; -+	} -+	RETURN_TRUE; -+} -+/* }}} */ -+ -+/* {{{ Rename an entry selected by its index to new_name */ -+PHP_METHOD(ZipArchive, renameIndex) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	char *new_name; -+	size_t new_name_len; -+	zend_long index; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "ls", &index, &new_name, &new_name_len) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	if (index < 0) { -+		RETURN_FALSE; -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (new_name_len == 0) { -+		zend_argument_must_not_be_empty_error(2); -+		RETURN_THROWS(); -+	} -+ -+	if (zip_file_rename(intern, index, (const char *)new_name, 0) != 0) { -+		RETURN_FALSE; -+	} -+ -+	RETURN_TRUE; -+} -+/* }}} */ -+ -+/* {{{ Rename an entry selected by its name to new_name */ -+PHP_METHOD(ZipArchive, renameName) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	struct zip_stat sb; -+	char *name, *new_name; -+	size_t name_len, new_name_len; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &name, &name_len, &new_name, &new_name_len) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (new_name_len == 0) { -+		zend_argument_must_not_be_empty_error(2); -+		RETURN_THROWS(); -+	} -+ -+	PHP_ZIP_STAT_PATH(intern, name, name_len, 0, sb); -+ -+	if (zip_file_rename(intern, sb.index, (const char *)new_name, 0)) { -+		RETURN_FALSE; -+	} -+ -+	RETURN_TRUE; -+} -+/* }}} */ -+ -+/* {{{ Changes to the file at position index are reverted */ -+PHP_METHOD(ZipArchive, unchangeIndex) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_long index; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &index) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (index < 0) { -+		RETURN_FALSE; -+	} -+ -+	if (zip_unchange(intern, index) != 0) { -+		RETURN_FALSE; -+	} else { -+		RETURN_TRUE; -+	} -+} -+/* }}} */ -+ -+/* {{{ Changes to the file named 'name' are reverted */ -+PHP_METHOD(ZipArchive, unchangeName) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	struct zip_stat sb; -+	char *name; -+	size_t name_len; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &name, &name_len) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (name_len < 1) { -+		RETURN_FALSE; -+	} -+ -+	PHP_ZIP_STAT_PATH(intern, name, name_len, 0, sb); -+ -+	if (zip_unchange(intern, sb.index) != 0) { -+		RETURN_FALSE; -+	} else { -+		RETURN_TRUE; -+	} -+} -+/* }}} */ -+ -+/* {{{ All changes to files and global information in archive are reverted */ -+PHP_METHOD(ZipArchive, unchangeAll) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+ -+	if (zend_parse_parameters_none() == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (zip_unchange_all(intern) != 0) { -+		RETURN_FALSE; -+	} else { -+		RETURN_TRUE; -+	} -+} -+/* }}} */ -+ -+/* {{{ Revert all global changes to the archive archive.  For now, this only reverts archive comment changes. */ -+PHP_METHOD(ZipArchive, unchangeArchive) -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+ -+	if (zend_parse_parameters_none() == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (zip_unchange_archive(intern) != 0) { -+		RETURN_FALSE; -+	} else { -+		RETURN_TRUE; -+	} -+} -+/* }}} */ -+ -+/* {{{ Extract one or more file from a zip archive */ -+/* TODO: -+ * - allow index or array of indices -+ * - replace path -+ * - patterns -+ */ -+PHP_METHOD(ZipArchive, extractTo) -+{ -+	struct zip *intern; -+ -+	zval *self = ZEND_THIS; -+	zend_string *files_str = NULL; -+	HashTable *files_ht = NULL; -+ -+	php_stream_statbuf ssb; -+	char *pathto; -+	size_t pathto_len; -+	int ret; -+ -+	ZEND_PARSE_PARAMETERS_START(1, 2) -+		Z_PARAM_PATH(pathto, pathto_len) -+		Z_PARAM_OPTIONAL -+		Z_PARAM_ARRAY_HT_OR_STR_OR_NULL(files_ht, files_str) -+	ZEND_PARSE_PARAMETERS_END(); -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (pathto_len < 1) { -+		RETURN_FALSE; -+	} -+ -+	if (php_stream_stat_path_ex(pathto, PHP_STREAM_URL_STAT_QUIET, &ssb, NULL) < 0) { -+		ret = php_stream_mkdir(pathto, 0777, PHP_STREAM_MKDIR_RECURSIVE, NULL); -+		if (!ret) { -+			RETURN_FALSE; -+		} -+	} -+ -+	uint32_t nelems, i; -+ -+	if (files_str) { -+		if (!php_zip_extract_file(intern, pathto, ZSTR_VAL(files_str), ZSTR_LEN(files_str), -1)) { -+			RETURN_FALSE; -+		} -+	} else if (files_ht) { -+		nelems = zend_hash_num_elements(files_ht); -+		if (nelems == 0 ) { -+			RETURN_FALSE; -+		} -+		for (i = 0; i < nelems; i++) { -+			zval *zval_file; -+			if ((zval_file = zend_hash_index_find_deref(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), -1)) { -+							RETURN_FALSE; -+						} -+						break; -+				} -+			} -+		} -+	} else { -+		/* Extract all files */ -+		zip_int64_t i, filecount = zip_get_num_entries(intern, 0); -+ -+		if (filecount == -1) { -+				php_error_docref(NULL, E_WARNING, "Illegal archive"); -+				RETURN_FALSE; -+		} -+ -+		for (i = 0; i < filecount; i++) { -+			const char *file = zip_get_name(intern, i, ZIP_FL_UNCHANGED); -+			if (!file || !php_zip_extract_file(intern, pathto, file, strlen(file), i)) { -+					RETURN_FALSE; -+			} -+		} -+	} -+ -+	RETURN_TRUE; -+} -+/* }}} */ -+ -+static void php_zip_get_from(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */ -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+ -+	struct zip_stat sb; -+	struct zip_file *zf; -+ -+	zend_long index = -1; -+	zend_long flags = 0; -+	zend_long len = 0; -+ -+	zend_string *filename; -+	zend_string *buffer; -+ -+	int n = 0; -+ -+	if (type == 1) { -+		if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|ll", &filename, &len, &flags) == FAILURE) { -+			RETURN_THROWS(); -+		} -+ -+		ZIP_FROM_OBJECT(intern, self); -+ -+		PHP_ZIP_STAT_PATH(intern, ZSTR_VAL(filename), ZSTR_LEN(filename), flags, sb); -+	} else { -+		if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|ll", &index, &len, &flags) == FAILURE) { -+			RETURN_THROWS(); -+		} -+ -+		ZIP_FROM_OBJECT(intern, self); -+ -+		PHP_ZIP_STAT_INDEX(intern, index, 0, sb); -+	} -+ -+	if (sb.size < 1) { -+		RETURN_EMPTY_STRING(); -+	} -+ -+	if (len < 1) { -+		len = sb.size; -+	} -+	if (index >= 0) { -+		zf = zip_fopen_index(intern, index, flags); -+	} else { -+		zf = zip_fopen(intern, ZSTR_VAL(filename), flags); -+	} -+ -+	if (zf == NULL) { -+		RETURN_FALSE; -+	} -+ -+	buffer = zend_string_safe_alloc(1, len, 0, 0); -+	n = zip_fread(zf, ZSTR_VAL(buffer), ZSTR_LEN(buffer)); -+	if (n < 1) { -+		zend_string_efree(buffer); -+		RETURN_EMPTY_STRING(); -+	} -+ -+	zip_fclose(zf); -+	ZSTR_VAL(buffer)[n] = '\0'; -+	ZSTR_LEN(buffer) = n; -+	RETURN_NEW_STR(buffer); -+} -+/* }}} */ -+ -+/* {{{ get the contents of an entry using its name */ -+PHP_METHOD(ZipArchive, getFromName) -+{ -+	php_zip_get_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1); -+} -+/* }}} */ -+ -+/* {{{ get the contents of an entry using its index */ -+PHP_METHOD(ZipArchive, getFromIndex) -+{ -+	php_zip_get_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); -+} -+/* }}} */ -+ -+static void php_zip_get_stream(INTERNAL_FUNCTION_PARAMETERS, int type, bool accept_flags) /* {{{ */ -+{ -+	struct zip *intern; -+	zval *self = ZEND_THIS; -+	zend_long index; -+	zend_long flags = 0; -+	struct zip_stat sb; -+	char *mode = "rb"; -+	zend_string *filename; -+	php_stream *stream; -+ -+	if (type) { -+		if (accept_flags) { -+			if (zend_parse_parameters(ZEND_NUM_ARGS(), "P|l", &filename, &flags) == FAILURE) { -+				RETURN_THROWS(); -+			} -+		} else { -+			if (zend_parse_parameters(ZEND_NUM_ARGS(), "P", &filename) == FAILURE) { -+				RETURN_THROWS(); -+			} -+		} -+	} else { -+		ZEND_ASSERT(accept_flags); -+		if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|l", &index, &flags) == FAILURE) { -+			RETURN_THROWS(); -+		} -+	} -+ -+	ZIP_FROM_OBJECT(intern, self); -+ -+	if (type) { -+		PHP_ZIP_STAT_PATH(intern, ZSTR_VAL(filename), ZSTR_LEN(filename), flags, sb); -+	} else { -+		PHP_ZIP_STAT_INDEX(intern, index, flags, sb); -+	} -+ -+	stream = php_stream_zip_open(intern, &sb, mode, flags STREAMS_CC); -+	if (stream) { -+		php_stream_to_zval(stream, return_value); -+	} else { -+		RETURN_FALSE; -+	} -+} -+ -+/* {{{ get a stream for an entry using its name */ -+PHP_METHOD(ZipArchive, getStreamName) -+{ -+	php_zip_get_stream(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1, /* accept_flags */ true); -+} -+/* }}} */ -+ -+/* {{{ get a stream for an entry using its index */ -+PHP_METHOD(ZipArchive, getStreamIndex) -+{ -+	php_zip_get_stream(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, /* accept_flags */ true); -+} -+/* }}} */ -+ -+PHP_METHOD(ZipArchive, getStream) -+{ -+	php_zip_get_stream(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1, /* accept_flags */ false); -+} -+ -+#ifdef HAVE_PROGRESS_CALLBACK -+static void php_zip_progress_callback(zip_t *arch, double state, void *ptr) -+{ -+	zval cb_args[1]; -+	ze_zip_object *obj = ptr; -+ -+	ZVAL_DOUBLE(&cb_args[0], state); -+	zend_call_known_fcc(&obj->progress_callback, NULL, 1, cb_args, NULL); -+} -+ -+/* {{{ register a progression callback: void callback(double state); */ -+PHP_METHOD(ZipArchive, registerProgressCallback) -+{ -+	struct zip *intern; -+	double rate; -+	zend_fcall_info dummy_fci; -+	zend_fcall_info_cache fcc; -+	ze_zip_object *obj; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "dF", &rate, &dummy_fci, &fcc) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	/* Inline ZIP_FROM_OBJECT(intern, self); */ -+	obj = Z_ZIP_P(ZEND_THIS); -+	intern = obj->za; -+	if (!intern) { \ -+		zend_value_error("Invalid or uninitialized Zip object"); -+		zend_release_fcall_info_cache(&fcc); -+		RETURN_THROWS(); -+	} -+ -+	/* register */ -+	if (zip_register_progress_callback_with_state(intern, rate, php_zip_progress_callback, php_zip_progress_callback_free, obj)) { -+		RETURN_FALSE; -+	} -+	zend_fcc_dup(&obj->progress_callback, &fcc); -+ -+	RETURN_TRUE; -+} -+/* }}} */ -+#endif -+ -+#ifdef HAVE_CANCEL_CALLBACK -+static int php_zip_cancel_callback(zip_t *arch, void *ptr) -+{ -+	zval cb_retval; -+	ze_zip_object *obj = ptr; -+ -+	zend_call_known_fcc(&obj->cancel_callback, &cb_retval, 0, NULL, NULL); -+	if (Z_ISUNDEF(cb_retval)) { -+		/* Cancel if an exception has been thrown */ -+		return -1; -+	} -+	bool failed; -+	zend_long retval = zval_try_get_long(&cb_retval, &failed); -+	if (failed) { -+		zend_type_error("Return value of callback provided to ZipArchive::registerCancelCallback()" -+			" must be of type int, %s returned", zend_zval_value_name(&cb_retval)); -+		zval_ptr_dtor(&cb_retval); -+		return -1; -+	} -+	zval_ptr_dtor(&cb_retval); -+ -+	return (int) retval; -+} -+ -+/* {{{ register a progression callback: int callback(double state); */ -+PHP_METHOD(ZipArchive, registerCancelCallback) -+{ -+	struct zip *intern; -+	zend_fcall_info dummy_fci; -+	zend_fcall_info_cache fcc; -+	ze_zip_object *obj; -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "F", &dummy_fci, &fcc) == FAILURE) { -+		RETURN_THROWS(); -+	} -+ -+	/* Inline ZIP_FROM_OBJECT(intern, self); */ -+	obj = Z_ZIP_P(ZEND_THIS); -+	intern = obj->za; -+	if (!intern) { \ -+		zend_value_error("Invalid or uninitialized Zip object"); -+		zend_release_fcall_info_cache(&fcc); -+		RETURN_THROWS(); -+	} -+ -+	/* register */ -+	if (zip_register_cancel_callback_with_state(intern, php_zip_cancel_callback, php_zip_cancel_callback_free, obj)) { -+		RETURN_FALSE; -+	} -+	zend_fcc_dup(&obj->cancel_callback, &fcc); -+ -+	RETURN_TRUE; -+} -+/* }}} */ -+#endif -+ -+#ifdef HAVE_METHOD_SUPPORTED -+/* {{{ check if a compression method is available in used libzip */ -+PHP_METHOD(ZipArchive, isCompressionMethodSupported) -+{ -+	zend_long method; -+	bool enc = 1; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|b", &method, &enc) == FAILURE) { -+		return; -+	} -+	RETVAL_BOOL(zip_compression_method_supported((zip_int32_t)method, enc)); -+} -+/* }}} */ -+ -+/* {{{ check if a encryption method is available in used libzip */ -+PHP_METHOD(ZipArchive, isEncryptionMethodSupported) -+{ -+	zend_long method; -+	bool enc = 1; -+ -+	if (zend_parse_parameters(ZEND_NUM_ARGS(), "l|b", &method, &enc) == FAILURE) { -+		return; -+	} -+	RETVAL_BOOL(zip_encryption_method_supported((zip_uint16_t)method, enc)); -+} -+/* }}} */ -+#endif -+ -+static void php_zip_free_prop_handler(zval *el) /* {{{ */ { -+	pefree(Z_PTR_P(el), 1); -+} /* }}} */ -+ -+/* {{{ PHP_MINIT_FUNCTION */ -+static PHP_MINIT_FUNCTION(zip) -+{ -+	memcpy(&zip_object_handlers, &std_object_handlers, sizeof(zend_object_handlers)); -+	zip_object_handlers.offset = XtOffsetOf(ze_zip_object, zo); -+	zip_object_handlers.free_obj = php_zip_object_free_storage; -+	zip_object_handlers.clone_obj = NULL; -+	zip_object_handlers.get_property_ptr_ptr = php_zip_get_property_ptr_ptr; -+ -+	zip_object_handlers.get_gc          = php_zip_get_gc; -+	zip_object_handlers.get_properties = php_zip_get_properties; -+	zip_object_handlers.read_property	= php_zip_read_property; -+	zip_object_handlers.has_property	= php_zip_has_property; -+	zip_object_handlers.write_property = php_zip_write_property; -+ -+	zip_class_entry = register_class_ZipArchive(zend_ce_countable); -+	zip_class_entry->create_object = php_zip_object_new; -+	zip_class_entry->default_object_handlers = &zip_object_handlers; -+ -+	zend_hash_init(&zip_prop_handlers, 0, NULL, php_zip_free_prop_handler, 1); -+	php_zip_register_prop_handler(&zip_prop_handlers, "lastId",    php_zip_last_id, NULL, IS_LONG); -+	php_zip_register_prop_handler(&zip_prop_handlers, "status",    php_zip_status, NULL, IS_LONG); -+	php_zip_register_prop_handler(&zip_prop_handlers, "statusSys", php_zip_status_sys, NULL, IS_LONG); -+	php_zip_register_prop_handler(&zip_prop_handlers, "numFiles",  php_zip_get_num_files, NULL, IS_LONG); -+	php_zip_register_prop_handler(&zip_prop_handlers, "filename",  NULL, php_zipobj_get_filename, IS_STRING); -+	php_zip_register_prop_handler(&zip_prop_handlers, "comment",   NULL, php_zipobj_get_zip_comment, IS_STRING); -+ -+	php_register_url_stream_wrapper("zip", &php_stream_zip_wrapper); -+ -+	register_php_zip_symbols(module_number); -+ -+	le_zip_dir   = zend_register_list_destructors_ex(php_zip_free_dir,   NULL, le_zip_dir_name,   module_number); -+	le_zip_entry = zend_register_list_destructors_ex(php_zip_free_entry, NULL, le_zip_entry_name, module_number); -+ -+	return SUCCESS; -+} -+/* }}} */ -+ -+/* {{{ PHP_MSHUTDOWN_FUNCTION */ -+static PHP_MSHUTDOWN_FUNCTION(zip) -+{ -+	zend_hash_destroy(&zip_prop_handlers); -+	php_unregister_url_stream_wrapper("zip"); -+	return SUCCESS; -+} -+/* }}} */ -+ -+/* {{{ PHP_MINFO_FUNCTION */ -+static PHP_MINFO_FUNCTION(zip) -+{ -+	php_info_print_table_start(); -+ -+	php_info_print_table_row(2, "Zip", "enabled"); -+	php_info_print_table_row(2, "Zip version", PHP_ZIP_VERSION); -+#ifdef HAVE_LIBZIP_VERSION -+	if (strcmp(LIBZIP_VERSION, zip_libzip_version())) { -+		php_info_print_table_row(2, "Libzip headers version", LIBZIP_VERSION); -+		php_info_print_table_row(2, "Libzip library version", zip_libzip_version()); -+	} else -+#endif -+	{ -+		php_info_print_table_row(2, "Libzip version", LIBZIP_VERSION); -+	} -+#ifdef HAVE_METHOD_SUPPORTED -+	php_info_print_table_row(2, "BZIP2 compression", -+		zip_compression_method_supported(ZIP_CM_BZIP2, 1) ? "Yes" : "No"); -+	php_info_print_table_row(2, "XZ compression", -+		zip_compression_method_supported(ZIP_CM_XZ, 1) ? "Yes" : "No"); -+#ifdef ZIP_CM_ZSTD -+	php_info_print_table_row(2, "ZSTD compression", -+		zip_compression_method_supported(ZIP_CM_ZSTD, 1) ? "Yes" : "No"); -+#else -+	php_info_print_table_row(2, "ZSTD compression", "No"); -+#endif -+	php_info_print_table_row(2, "AES-128 encryption", -+		zip_encryption_method_supported(ZIP_EM_AES_128, 1) ? "Yes" : "No"); -+	php_info_print_table_row(2, "AES-192 encryption", -+		zip_encryption_method_supported(ZIP_EM_AES_128, 1) ? "Yes" : "No"); -+	php_info_print_table_row(2, "AES-256 encryption", -+		zip_encryption_method_supported(ZIP_EM_AES_128, 1) ? "Yes" : "No"); -+#endif -+ -+	php_info_print_table_end(); -+} -+/* }}} */ -diff --git a/php85/php_zip.h b/php85/php_zip.h -new file mode 100644 -index 0000000..01d6c3d ---- /dev/null -+++ b/php85/php_zip.h -@@ -0,0 +1,101 @@ -+/* -+  +----------------------------------------------------------------------+ -+  | Copyright (c) The PHP Group                                          | -+  +----------------------------------------------------------------------+ -+  | This source file is subject to version 3.01 of the PHP license,      | -+  | that is bundled with this package in the file LICENSE, and is        | -+  | available through the world-wide-web at the following url:           | -+  | https://www.php.net/license/3_01.txt                                 | -+  | If you did not receive a copy of the PHP license and are unable to   | -+  | obtain it through the world-wide-web, please send a note to          | -+  | license@php.net so we can mail you a copy immediately.               | -+  +----------------------------------------------------------------------+ -+  | Author: Pierre-Alain Joye <pajoye@php.net>                           | -+  +----------------------------------------------------------------------+ -+*/ -+ -+ -+#ifndef PHP_ZIP_H -+#define PHP_ZIP_H -+ -+extern zend_module_entry zip_module_entry; -+#define phpext_zip_ptr &zip_module_entry -+ -+#ifdef ZTS -+#include "TSRM.h" -+#endif -+ -+#include <zip.h> -+ -+#ifndef ZIP_OVERWRITE -+#define ZIP_OVERWRITE ZIP_TRUNCATE -+#endif -+ -+/* since 1.10.1 */ -+#ifndef ZIP_LENGTH_TO_END -+#define ZIP_LENGTH_TO_END 0 -+#endif -+ -+/* Additionnal flags not from libzip */ -+#define ZIP_FL_OPEN_FILE_NOW (1u<<30) -+ -+#define PHP_ZIP_VERSION "1.22.6" -+ -+#ifdef HAVE_LIBZIP_VERSION -+#define LIBZIP_VERSION_STR zip_libzip_version() -+#else -+#define LIBZIP_VERSION_STR LIBZIP_VERSION -+#endif -+ -+#define ZIP_OPENBASEDIR_CHECKPATH(filename) php_check_open_basedir(filename) -+ -+typedef struct _ze_zip_rsrc { -+	struct zip *za; -+	zip_uint64_t index_current; -+	zip_int64_t num_files; -+} zip_rsrc; -+ -+typedef zip_rsrc * zip_rsrc_ptr; -+ -+typedef struct _ze_zip_read_rsrc { -+	struct zip_file *zf; -+	struct zip_stat sb; -+	/* Used to check if the zip resource still exists, -+	 * without holding a reference. This works because the IDs are unique. */ -+	zend_long zip_rsrc_handle; -+} zip_read_rsrc; -+ -+/* Extends zend object */ -+typedef struct _ze_zip_object { -+	struct zip *za; -+	char **buffers; -+	HashTable *prop_handler; -+	char *filename; -+	int filename_len; -+	int buffers_cnt; -+	zip_int64_t last_id; -+	int err_zip; -+	int err_sys; -+#ifdef HAVE_PROGRESS_CALLBACK -+	zend_fcall_info_cache progress_callback; -+#endif -+#ifdef HAVE_CANCEL_CALLBACK -+	zend_fcall_info_cache cancel_callback; -+#endif -+	zend_object zo; -+} ze_zip_object; -+ -+static inline ze_zip_object *php_zip_fetch_object(zend_object *obj) { -+	return (ze_zip_object *)((char*)(obj) - XtOffsetOf(ze_zip_object, zo)); -+} -+ -+#define Z_ZIP_P(zv) php_zip_fetch_object(Z_OBJ_P((zv))) -+ -+php_stream *php_stream_zip_opener(php_stream_wrapper *wrapper, const char *path, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC); -+php_stream *php_stream_zip_open(struct zip *arch, struct zip_stat *sb, const char *mode, zip_flags_t flags STREAMS_DC); -+ -+extern const php_stream_wrapper php_stream_zip_wrapper; -+ -+#define LIBZIP_ATLEAST(m,n,p) (((m<<16) + (n<<8) + p) <= ((LIBZIP_VERSION_MAJOR<<16) + (LIBZIP_VERSION_MINOR<<8) + LIBZIP_VERSION_MICRO)) -+ -+#endif	/* PHP_ZIP_H */ -diff --git a/php85/php_zip.stub.php b/php85/php_zip.stub.php -new file mode 100644 -index 0000000..3473d27 ---- /dev/null -+++ b/php85/php_zip.stub.php -@@ -0,0 +1,824 @@ -+<?php -+ -+/** @generate-class-entries */ -+ -+/** -+ * @return resource|int|false -+ */ -+#[\Deprecated(since: '8.0', message: 'use ZipArchive::open() instead')] -+function zip_open(string $filename) {} -+ -+/** -+ * @param resource $zip -+ */ -+#[\Deprecated(since: '8.0', message: 'use ZipArchive::close() instead')] -+function zip_close($zip): void {} -+ -+/** -+ * @param resource $zip -+ * @return resource|false -+ */ -+#[\Deprecated(since: '8.0', message: 'use ZipArchive::statIndex() instead')] -+function zip_read($zip) {} -+ -+/** -+ * @param resource $zip_dp -+ * @param resource $zip_entry -+ */ -+#[\Deprecated(since: '8.0')] -+function zip_entry_open($zip_dp, $zip_entry, string $mode = "rb"): bool {} -+ -+/** -+ * @param resource $zip_entry -+ */ -+#[\Deprecated(since: '8.0')] -+function zip_entry_close($zip_entry): bool {} -+ -+/** -+ * @param resource $zip_entry -+ */ -+#[\Deprecated(since: '8.0', message: 'use ZipArchive::getFromIndex() instead')] -+function zip_entry_read($zip_entry, int $len = 1024): string|false {} -+ -+/** -+ * @param resource $zip_entry -+ */ -+#[\Deprecated(since: '8.0', message: 'use ZipArchive::statIndex() instead')] -+function zip_entry_name($zip_entry): string|false {} -+ -+/** -+ * @param resource $zip_entry -+ */ -+#[\Deprecated(since: '8.0', message: 'use ZipArchive::statIndex() instead')] -+function zip_entry_compressedsize($zip_entry): int|false {} -+ -+/** -+ * @param resource $zip_entry -+ */ -+#[\Deprecated(since: '8.0', message: 'use ZipArchive::statIndex() instead')] -+function zip_entry_filesize($zip_entry): int|false {} -+ -+/** -+ * @param resource $zip_entry -+ */ -+#[\Deprecated(since: '8.0', message: 'use ZipArchive::statIndex() instead')] -+function zip_entry_compressionmethod($zip_entry): string|false {} -+ -+class ZipArchive implements Countable -+{ -+    /** -+     * @cvalue ZIP_CREATE -+     */ -+    public const int CREATE = UNKNOWN; -+    /** -+     * @cvalue ZIP_EXCL -+     */ -+    public const int EXCL = UNKNOWN; -+    /** -+     * @cvalue ZIP_CHECKCONS -+     */ -+    public const int CHECKCONS = UNKNOWN; -+    /** -+     * @cvalue ZIP_OVERWRITE -+     */ -+    public const int OVERWRITE = UNKNOWN; -+#ifdef ZIP_RDONLY -+    /** -+     * @cvalue ZIP_RDONLY -+     */ -+    public const int RDONLY = UNKNOWN; -+#endif -+ -+    /** -+     * @cvalue ZIP_FL_NOCASE -+     */ -+    public const int FL_NOCASE = UNKNOWN; -+    /** -+     * @cvalue ZIP_FL_NODIR -+     */ -+    public const int FL_NODIR = UNKNOWN; -+    /** -+     * @cvalue ZIP_FL_COMPRESSED -+     */ -+    public const int FL_COMPRESSED = UNKNOWN; -+    /** -+     * @cvalue ZIP_FL_UNCHANGED -+     */ -+    public const int FL_UNCHANGED = UNKNOWN; -+/* deprecated in libzip 1.10.0 */ -+#ifdef ZIP_FL_RECOMPRESS -+    /** -+     * @cvalue ZIP_FL_RECOMPRESS -+     */ -+    #[\Deprecated(since: '8.3')] -+    public const int FL_RECOMPRESS = UNKNOWN; -+#endif -+    /** -+     * @cvalue ZIP_FL_ENCRYPTED -+     */ -+    public const int FL_ENCRYPTED = UNKNOWN; -+    /** -+     * @cvalue ZIP_FL_OVERWRITE -+     */ -+    public const int FL_OVERWRITE = UNKNOWN; -+    /** -+     * @cvalue ZIP_FL_LOCAL -+     */ -+    public const int FL_LOCAL = UNKNOWN; -+    /** -+     * @cvalue ZIP_FL_CENTRAL -+     */ -+    public const int FL_CENTRAL = UNKNOWN; -+ -+    /* Default filename encoding policy. */ -+ -+    /** -+     * @cvalue ZIP_FL_ENC_GUESS -+     */ -+    public const int FL_ENC_GUESS = UNKNOWN; -+    /** -+     * @cvalue ZIP_FL_ENC_RAW -+     */ -+    public const int FL_ENC_RAW = UNKNOWN; -+    /** -+     * @cvalue ZIP_FL_ENC_STRICT -+     */ -+    public const int FL_ENC_STRICT = UNKNOWN; -+    /** -+     * @cvalue ZIP_FL_ENC_UTF_8 -+     */ -+    public const int FL_ENC_UTF_8 = UNKNOWN; -+    /** -+     * @cvalue ZIP_FL_ENC_CP437 -+     */ -+    public const int FL_ENC_CP437 = UNKNOWN; -+ -+    /** -+     * Additionnal flags not from libzip -+     * @cvalue ZIP_FL_OPEN_FILE_NOW -+     */ -+    public const int FL_OPEN_FILE_NOW = UNKNOWN; -+ -+    /** -+     * @cvalue ZIP_CM_DEFAULT -+     */ -+    public const int CM_DEFAULT = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_STORE -+     */ -+    public const int CM_STORE = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_SHRINK -+     */ -+    public const int CM_SHRINK = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_REDUCE_1 -+     */ -+    public const int CM_REDUCE_1 = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_REDUCE_2 -+     */ -+    public const int CM_REDUCE_2 = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_REDUCE_3 -+     */ -+    public const int CM_REDUCE_3 = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_REDUCE_4 -+     */ -+    public const int CM_REDUCE_4 = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_IMPLODE -+     */ -+    public const int CM_IMPLODE = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_DEFLATE -+     */ -+    public const int CM_DEFLATE = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_DEFLATE64 -+     */ -+    public const int CM_DEFLATE64 = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_PKWARE_IMPLODE -+     */ -+    public const int CM_PKWARE_IMPLODE = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_BZIP2 -+     */ -+    public const int CM_BZIP2 = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_LZMA -+     */ -+    public const int CM_LZMA = UNKNOWN; -+#ifdef ZIP_CM_LZMA2 -+    /** -+     * @cvalue ZIP_CM_LZMA2 -+     */ -+    public const int CM_LZMA2 = UNKNOWN; -+#endif -+ -+#ifdef ZIP_CM_ZSTD -+    /** -+     * @cvalue ZIP_CM_ZSTD -+     */ -+    public const int CM_ZSTD = UNKNOWN; -+#endif -+#ifdef ZIP_CM_XZ -+    /** -+     * @cvalue ZIP_CM_XZ -+     */ -+    public const int CM_XZ = UNKNOWN; -+#endif -+    /** -+     * @cvalue ZIP_CM_TERSE -+     */ -+    public const int CM_TERSE = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_LZ77 -+     */ -+    public const int CM_LZ77 = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_WAVPACK -+     */ -+    public const int CM_WAVPACK = UNKNOWN; -+    /** -+     * @cvalue ZIP_CM_PPMD -+     */ -+    public const int CM_PPMD = UNKNOWN; -+ -+    /* Error code */ -+ -+    /** -+     * N No error -+     * @cvalue ZIP_ER_OK -+     */ -+    public const int ER_OK = UNKNOWN; -+    /** -+     * N Multi-disk zip archives not supported -+     * @cvalue ZIP_ER_MULTIDISK -+     */ -+    public const int ER_MULTIDISK = UNKNOWN; -+    /** -+     * S Renaming temporary file failed -+     * @cvalue ZIP_ER_RENAME -+     */ -+    public const int ER_RENAME = UNKNOWN; -+    /** -+     * S Closing zip archive failed -+     * @cvalue ZIP_ER_CLOSE -+     */ -+    public const int ER_CLOSE = UNKNOWN; -+    /** -+     * S Seek error -+     * @cvalue ZIP_ER_SEEK -+     */ -+    public const int ER_SEEK = UNKNOWN; -+    /** -+     * S Read error -+     * @cvalue ZIP_ER_READ -+     */ -+    public const int ER_READ = UNKNOWN; -+    /** -+     * S Write error -+     * @cvalue ZIP_ER_WRITE -+     */ -+    public const int ER_WRITE = UNKNOWN; -+    /** -+     * N CRC error -+     * @cvalue ZIP_ER_CRC -+     */ -+    public const int ER_CRC = UNKNOWN; -+    /** -+     * N Containing zip archive was closed -+     * @cvalue ZIP_ER_ZIPCLOSED -+     */ -+    public const int ER_ZIPCLOSED = UNKNOWN; -+    /** -+     * N No such file -+     * @cvalue ZIP_ER_NOENT -+     */ -+    public const int ER_NOENT = UNKNOWN; -+    /** -+     * N File already exists -+     * @cvalue ZIP_ER_EXISTS -+     */ -+    public const int ER_EXISTS = UNKNOWN; -+    /** -+     * S Can't open file -+     * @cvalue ZIP_ER_OPEN -+     */ -+    public const int ER_OPEN = UNKNOWN; -+    /** -+     * S Failure to create temporary file -+     * @cvalue ZIP_ER_TMPOPEN -+     */ -+    public const int ER_TMPOPEN = UNKNOWN; -+    /** -+     * Z Zlib error -+     * @cvalue ZIP_ER_ZLIB -+     */ -+    public const int ER_ZLIB = UNKNOWN; -+    /** -+     * N Malloc failure -+     * @cvalue ZIP_ER_MEMORY -+     */ -+    public const int ER_MEMORY = UNKNOWN; -+    /** -+     * N Entry has been changed -+     * @cvalue ZIP_ER_CHANGED -+     */ -+    public const int ER_CHANGED = UNKNOWN; -+    /** -+     * N Compression method not supported -+     * @cvalue ZIP_ER_COMPNOTSUPP -+     */ -+    public const int ER_COMPNOTSUPP = UNKNOWN; -+    /** -+     * N Premature EOF -+     * @cvalue ZIP_ER_EOF -+     */ -+    public const int ER_EOF = UNKNOWN; -+    /** -+     * N Invalid argument -+     * @cvalue ZIP_ER_INVAL -+     */ -+    public const int ER_INVAL = UNKNOWN; -+    /** -+     * N Not a zip archive -+     * @cvalue ZIP_ER_NOZIP -+     */ -+    public const int ER_NOZIP = UNKNOWN; -+    /** -+     * N Internal error -+     * @cvalue ZIP_ER_INTERNAL -+     */ -+    public const int ER_INTERNAL = UNKNOWN; -+    /** -+     * N Zip archive inconsistent -+     * @cvalue ZIP_ER_INCONS -+     */ -+    public const int ER_INCONS = UNKNOWN; -+    /** -+     * S Can't remove file -+     * @cvalue ZIP_ER_REMOVE -+     */ -+    public const int ER_REMOVE = UNKNOWN; -+    /** -+     * N Entry has been deleted -+     * @cvalue ZIP_ER_DELETED -+     */ -+    public const int ER_DELETED = UNKNOWN; -+    /** -+     * N Encryption method not supported -+     * @cvalue ZIP_ER_ENCRNOTSUPP -+     */ -+    public const int ER_ENCRNOTSUPP = UNKNOWN; -+    /** -+     * N Read-only archive -+     * @cvalue ZIP_ER_RDONLY -+     */ -+    public const int ER_RDONLY = UNKNOWN; -+    /** -+     * N Entry has been deleted -+     * @cvalue ZIP_ER_NOPASSWD -+     */ -+    public const int ER_NOPASSWD = UNKNOWN; -+    /** -+     * N Wrong password provided -+     * @cvalue ZIP_ER_WRONGPASSWD -+     */ -+    public const int ER_WRONGPASSWD = UNKNOWN; -+ -+    /* since 1.0.0 */ -+#ifdef ZIP_ER_OPNOTSUPP -+    /** -+     * N Operation not supported -+     * @cvalue ZIP_ER_OPNOTSUPP -+     */ -+    public const int ER_OPNOTSUPP = UNKNOWN; -+#endif -+#ifdef ZIP_ER_INUSE -+    /** -+     * N Resource still in use -+     * @cvalue ZIP_ER_INUSE -+     */ -+    public const int ER_INUSE = UNKNOWN; -+#endif -+#ifdef ZIP_ER_TELL -+    /** -+     * S Tell error -+     * @cvalue ZIP_ER_TELL -+     */ -+    public const int ER_TELL = UNKNOWN; -+#endif -+ -+    /* since 1.6.0 */ -+#ifdef ZIP_ER_COMPRESSED_DATA -+    /** -+     * N Compressed data invalid -+     * @cvalue ZIP_ER_COMPRESSED_DATA -+     */ -+    public const int ER_COMPRESSED_DATA = UNKNOWN; -+#endif -+#ifdef ZIP_ER_CANCELLED -+    /** -+     * N Operation cancelled -+     * @cvalue ZIP_ER_CANCELLED -+     */ -+    public const int ER_CANCELLED = UNKNOWN; -+#endif -+ -+    /* since 1.10.0 */ -+#ifdef ZIP_ER_DATA_LENGTH -+    /** -+     * N Unexpected length of data -+     * @cvalue ZIP_ER_DATA_LENGTH -+     */ -+    public const int ER_DATA_LENGTH = UNKNOWN; -+#endif -+#ifdef ZIP_ER_NOT_ALLOWED -+    /** -+     * Not allowed in torrentzip -+     * @cvalue ZIP_ER_NOT_ALLOWED -+     */ -+    public const int ER_NOT_ALLOWED = UNKNOWN; -+#endif -+#ifdef ZIP_ER_TRUNCATED_ZIP -+    /** -+     * Possibly truncated or corrupted zip archive -+     * @cvalue ZIP_ER_TRUNCATED_ZIP -+     */ -+    public const int ER_TRUNCATED_ZIP = UNKNOWN; -+#endif -+#ifdef ZIP_AFL_RDONLY -+    /** -+     * read only -- cannot be cleared -+     * @cvalue ZIP_AFL_RDONLY -+     */ -+    public const int AFL_RDONLY = UNKNOWN; -+#endif -+#ifdef ZIP_AFL_IS_TORRENTZIP -+    /** -+     * current archive is torrentzipped -+     * @cvalue ZIP_AFL_IS_TORRENTZIP -+     */ -+    public const int AFL_IS_TORRENTZIP = UNKNOWN; -+#endif -+#ifdef ZIP_AFL_WANT_TORRENTZIP -+    /** -+     * write archive in torrentzip format -+     * @cvalue ZIP_AFL_WANT_TORRENTZIP -+     */ -+    public const int AFL_WANT_TORRENTZIP = UNKNOWN; -+#endif -+#ifdef ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE -+    /** -+     * don't remove file if archive is empty -+     * @cvalue ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE -+     */ -+    public const int AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE = UNKNOWN; -+#endif -+ -+#ifdef ZIP_OPSYS_DEFAULT -+    /** -+     * @cvalue ZIP_OPSYS_DOS -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_DOS = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_AMIGA -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_AMIGA = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_OPENVMS -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_OPENVMS = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_UNIX -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_UNIX = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_VM_CMS -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_VM_CMS = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_ATARI_ST -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_ATARI_ST = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_OS_2 -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_OS_2 = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_MACINTOSH -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_MACINTOSH = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_Z_SYSTEM -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_Z_SYSTEM = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_CPM -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_CPM = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_WINDOWS_NTFS -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_WINDOWS_NTFS = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_MVS -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_MVS = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_VSE -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_VSE = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_ACORN_RISC -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_ACORN_RISC = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_VFAT -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_VFAT = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_ALTERNATE_MVS -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_ALTERNATE_MVS = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_BEOS -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_BEOS = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_TANDEM -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_TANDEM = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_OS_400 -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_OS_400 = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_OS_X -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_OS_X = UNKNOWN; -+    /** -+     * @cvalue ZIP_OPSYS_DEFAULT -+     * @link ziparchive.constants.opsys -+     */ -+    public const int OPSYS_DEFAULT = UNKNOWN; -+#endif -+ -+    /** -+     * @cvalue ZIP_EM_NONE -+     */ -+    public const int EM_NONE = UNKNOWN; -+    /** -+     * @cvalue ZIP_EM_TRAD_PKWARE -+     */ -+    public const int EM_TRAD_PKWARE = UNKNOWN; -+#ifdef HAVE_ENCRYPTION -+    /** -+     * @cvalue ZIP_EM_AES_128 -+     */ -+    public const int EM_AES_128 = UNKNOWN; -+    /** -+     * @cvalue ZIP_EM_AES_192 -+     */ -+    public const int EM_AES_192 = UNKNOWN; -+    /** -+     * @cvalue ZIP_EM_AES_256 -+     */ -+    public const int EM_AES_256 = UNKNOWN; -+#endif -+    /** -+     * @cvalue ZIP_EM_UNKNOWN -+     */ -+    public const int EM_UNKNOWN = UNKNOWN; -+ -+    /** -+     * @cvalue LIBZIP_VERSION_STR -+     */ -+    public const string LIBZIP_VERSION = UNKNOWN; -+ -+    /** -+     * @cvalue ZIP_LENGTH_TO_END -+     */ -+    public const int LENGTH_TO_END = UNKNOWN; -+    /* since 1.10.1 */ -+#ifdef ZIP_LENGTH_UNCHECKED -+    /** -+     * @cvalue ZIP_LENGTH_UNCHECKED -+     */ -+    public const int LENGTH_UNCHECKED = UNKNOWN; -+#endif -+ -+    /** @readonly */ -+    public int $lastId; -+    /** @readonly */ -+    public int $status; -+    /** @readonly */ -+    public int $statusSys; -+    /** @readonly */ -+    public int $numFiles; -+    /** @readonly */ -+    public string $filename; -+    /** @readonly */ -+    public string $comment; -+ -+    /** @tentative-return-type */ -+    public function open(string $filename, int $flags = 0): bool|int {} -+ -+    /** -+     * @tentative-return-type -+     */ -+    public function setPassword(#[\SensitiveParameter] string $password): bool {} -+ -+    /** @tentative-return-type */ -+    public function close(): bool {} -+ -+    /** @tentative-return-type */ -+    public function count(): int {} -+ -+    /** @tentative-return-type */ -+    public function getStatusString(): string {} -+ -+    public function clearError(): void {} -+ -+    /** @tentative-return-type */ -+    public function addEmptyDir(string $dirname, int $flags = 0): bool {} -+ -+    /** @tentative-return-type */ -+    public function addFromString(string $name, string $content, int $flags = ZipArchive::FL_OVERWRITE): bool {} -+ -+    /** @tentative-return-type */ -+    public function addFile(string $filepath, string $entryname = "", int $start = 0, int $length = ZipArchive::LENGTH_TO_END, int $flags = ZipArchive::FL_OVERWRITE): bool {} -+ -+    /** @tentative-return-type */ -+    public function replaceFile(string $filepath, int $index, int $start = 0, int $length = ZipArchive::LENGTH_TO_END, int $flags = 0): bool {} -+ -+    /** @tentative-return-type */ -+    public function addGlob(string $pattern, int $flags = 0, array $options = []): array|false {} -+ -+    /** @tentative-return-type */ -+    public function addPattern(string $pattern, string $path = ".", array $options = []): array|false {} -+ -+    /** @tentative-return-type */ -+    public function renameIndex(int $index, string $new_name): bool {} -+ -+    /** @tentative-return-type */ -+    public function renameName(string $name, string $new_name): bool {} -+ -+    /** @tentative-return-type */ -+    public function setArchiveComment(string $comment): bool {} -+ -+    /** @tentative-return-type */ -+    public function getArchiveComment(int $flags = 0): string|false {} -+ -+    public function setArchiveFlag(int $flag, int $value): bool {} -+ -+    public function getArchiveFlag(int $flag, int $flags = 0): int {} -+ -+    /** @tentative-return-type */ -+    public function setCommentIndex(int $index, string $comment): bool {} -+ -+    /** @tentative-return-type */ -+    public function setCommentName(string $name, string $comment): bool {} -+ -+#ifdef HAVE_SET_MTIME -+    /** @tentative-return-type */ -+    public function setMtimeIndex(int $index, int $timestamp, int $flags = 0): bool {} -+ -+    /** @tentative-return-type */ -+    public function setMtimeName(string $name, int $timestamp, int $flags = 0): bool {} -+#endif -+ -+    /** @tentative-return-type */ -+    public function getCommentIndex(int $index, int $flags = 0): string|false {} -+ -+    /** @tentative-return-type */ -+    public function getCommentName(string $name, int $flags = 0): string|false {} -+ -+    /** @tentative-return-type */ -+    public function deleteIndex(int $index): bool {} -+ -+    /** @tentative-return-type */ -+    public function deleteName(string $name): bool {} -+ -+    /** @tentative-return-type */ -+    public function statName(string $name, int $flags = 0): array|false {} -+ -+    /** @tentative-return-type */ -+    public function statIndex(int $index, int $flags = 0): array|false {} -+ -+    /** @tentative-return-type */ -+    public function locateName(string $name, int $flags = 0): int|false {} -+ -+    /** @tentative-return-type */ -+    public function getNameIndex(int $index, int $flags = 0): string|false {} -+ -+    /** @tentative-return-type */ -+    public function unchangeArchive(): bool {} -+ -+    /** @tentative-return-type */ -+    public function unchangeAll(): bool {} -+ -+    /** @tentative-return-type */ -+    public function unchangeIndex(int $index): bool {} -+ -+    /** @tentative-return-type */ -+    public function unchangeName(string $name): bool {} -+ -+    /** @tentative-return-type */ -+    public function extractTo(string $pathto, array|string|null $files = null): bool {} -+ -+    /** @tentative-return-type */ -+    public function getFromName(string $name, int $len = 0, int $flags = 0): string|false {} -+ -+    /** @tentative-return-type */ -+    public function getFromIndex(int $index, int $len = 0, int $flags = 0): string|false {} -+ -+    /** @return resource|false */ -+    public function getStreamIndex(int $index, int $flags = 0) {} -+ -+    /** @return resource|false */ -+    public function getStreamName(string $name, int $flags = 0) {} -+ -+	/** @return resource|false */ -+    public function getStream(string $name) {} -+ -+#ifdef ZIP_OPSYS_DEFAULT -+    /** @tentative-return-type */ -+    public function setExternalAttributesName(string $name, int $opsys, int $attr, int $flags = 0): bool {} -+ -+    /** @tentative-return-type */ -+    public function setExternalAttributesIndex(int $index, int $opsys, int $attr, int $flags = 0): bool {} -+ -+    /** -+     * @param int $opsys -+     * @param int $attr -+     * @tentative-return-type -+     */ -+    public function getExternalAttributesName(string $name, &$opsys, &$attr, int $flags = 0): bool {} -+ -+    /** -+     * @param int $opsys -+     * @param int $attr -+     * @tentative-return-type -+     */ -+    public function getExternalAttributesIndex(int $index, &$opsys, &$attr, int $flags = 0): bool {} -+#endif -+ -+    /** @tentative-return-type */ -+    public function setCompressionName(string $name, int $method, int $compflags = 0): bool {} -+ -+    /** @tentative-return-type */ -+    public function setCompressionIndex(int $index, int $method, int $compflags = 0): bool {} -+ -+#ifdef HAVE_ENCRYPTION -+    /** -+     * @tentative-return-type -+     */ -+    public function setEncryptionName(string $name, int $method, #[\SensitiveParameter] ?string $password = null): bool {} -+ -+    /** -+     * @tentative-return-type -+     */ -+    public function setEncryptionIndex(int $index, int $method, #[\SensitiveParameter] ?string $password = null): bool {} -+#endif -+ -+#ifdef HAVE_PROGRESS_CALLBACK -+    /** @tentative-return-type */ -+    public function registerProgressCallback(float $rate, callable $callback): bool {} -+#endif -+ -+#ifdef HAVE_CANCEL_CALLBACK -+    /** @tentative-return-type */ -+    public function registerCancelCallback(callable $callback): bool {} -+#endif -+ -+#ifdef HAVE_METHOD_SUPPORTED -+    public static function isCompressionMethodSupported(int $method, bool $enc = true): bool {} -+ -+    public static function isEncryptionMethodSupported(int $method, bool $enc = true): bool {} -+#endif -+} -diff --git a/php85/php_zip_arginfo.h b/php85/php_zip_arginfo.h -new file mode 100644 -index 0000000..c8dab41 ---- /dev/null -+++ b/php85/php_zip_arginfo.h -@@ -0,0 +1,1343 @@ -+/* This is a generated file, edit the .stub.php file instead. -+ * Stub hash: 53e04d9b2c25cc8a0c9fe51914b5a47280834fb8 */ -+ -+ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_open, 0, 0, 1) -+	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zip_close, 0, 1, IS_VOID, 0) -+	ZEND_ARG_INFO(0, zip) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_read, 0, 0, 1) -+	ZEND_ARG_INFO(0, zip) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zip_entry_open, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_INFO(0, zip_dp) -+	ZEND_ARG_INFO(0, zip_entry) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, mode, IS_STRING, 0, "\"rb\"") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zip_entry_close, 0, 1, _IS_BOOL, 0) -+	ZEND_ARG_INFO(0, zip_entry) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_zip_entry_read, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) -+	ZEND_ARG_INFO(0, zip_entry) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, len, IS_LONG, 0, "1024") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_zip_entry_name, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) -+	ZEND_ARG_INFO(0, zip_entry) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_zip_entry_compressedsize, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) -+	ZEND_ARG_INFO(0, zip_entry) -+ZEND_END_ARG_INFO() -+ -+#define arginfo_zip_entry_filesize arginfo_zip_entry_compressedsize -+ -+#define arginfo_zip_entry_compressionmethod arginfo_zip_entry_name -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_ZipArchive_open, 0, 1, MAY_BE_BOOL|MAY_BE_LONG) -+	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_setPassword, 0, 1, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, password, IS_STRING, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_close, 0, 0, _IS_BOOL, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_count, 0, 0, IS_LONG, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_getStatusString, 0, 0, IS_STRING, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_clearError, 0, 0, IS_VOID, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_addEmptyDir, 0, 1, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, dirname, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_addFromString, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO(0, content, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "ZipArchive::FL_OVERWRITE") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_addFile, 0, 1, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, filepath, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, entryname, IS_STRING, 0, "\"\"") -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, start, IS_LONG, 0, "0") -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 0, "ZipArchive::LENGTH_TO_END") -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "ZipArchive::FL_OVERWRITE") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_replaceFile, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, filepath, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, start, IS_LONG, 0, "0") -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 0, "ZipArchive::LENGTH_TO_END") -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_ZipArchive_addGlob, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) -+	ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 0, "[]") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_ZipArchive_addPattern, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) -+	ZEND_ARG_TYPE_INFO(0, pattern, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, path, IS_STRING, 0, "\".\"") -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, options, IS_ARRAY, 0, "[]") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_renameIndex, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO(0, new_name, IS_STRING, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_renameName, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO(0, new_name, IS_STRING, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_setArchiveComment, 0, 1, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, comment, IS_STRING, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_ZipArchive_getArchiveComment, 0, 0, MAY_BE_STRING|MAY_BE_FALSE) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_setArchiveFlag, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, flag, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO(0, value, IS_LONG, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_getArchiveFlag, 0, 1, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO(0, flag, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_setCommentIndex, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO(0, comment, IS_STRING, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_setCommentName, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO(0, comment, IS_STRING, 0) -+ZEND_END_ARG_INFO() -+ -+#if defined(HAVE_SET_MTIME) -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_setMtimeIndex, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO(0, timestamp, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_setMtimeName, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO(0, timestamp, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+#endif -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_ZipArchive_getCommentIndex, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) -+	ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_ZipArchive_getCommentName, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_deleteIndex, 0, 1, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_deleteName, 0, 1, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_ZipArchive_statName, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_ZipArchive_statIndex, 0, 1, MAY_BE_ARRAY|MAY_BE_FALSE) -+	ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_ZipArchive_locateName, 0, 1, MAY_BE_LONG|MAY_BE_FALSE) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+#define arginfo_class_ZipArchive_getNameIndex arginfo_class_ZipArchive_getCommentIndex -+ -+#define arginfo_class_ZipArchive_unchangeArchive arginfo_class_ZipArchive_close -+ -+#define arginfo_class_ZipArchive_unchangeAll arginfo_class_ZipArchive_close -+ -+#define arginfo_class_ZipArchive_unchangeIndex arginfo_class_ZipArchive_deleteIndex -+ -+#define arginfo_class_ZipArchive_unchangeName arginfo_class_ZipArchive_deleteName -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_extractTo, 0, 1, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, pathto, IS_STRING, 0) -+	ZEND_ARG_TYPE_MASK(0, files, MAY_BE_ARRAY|MAY_BE_STRING|MAY_BE_NULL, "null") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_ZipArchive_getFromName, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, len, IS_LONG, 0, "0") -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX(arginfo_class_ZipArchive_getFromIndex, 0, 1, MAY_BE_STRING|MAY_BE_FALSE) -+	ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, len, IS_LONG, 0, "0") -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ZipArchive_getStreamIndex, 0, 0, 1) -+	ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ZipArchive_getStreamName, 0, 0, 1) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ZipArchive_getStream, 0, 0, 1) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+ZEND_END_ARG_INFO() -+ -+#if defined(ZIP_OPSYS_DEFAULT) -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_setExternalAttributesName, 0, 3, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO(0, opsys, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO(0, attr, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_setExternalAttributesIndex, 0, 3, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO(0, opsys, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO(0, attr, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_getExternalAttributesName, 0, 3, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+	ZEND_ARG_INFO(1, opsys) -+	ZEND_ARG_INFO(1, attr) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_getExternalAttributesIndex, 0, 3, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) -+	ZEND_ARG_INFO(1, opsys) -+	ZEND_ARG_INFO(1, attr) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, flags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+#endif -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_setCompressionName, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO(0, method, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, compflags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_setCompressionIndex, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO(0, method, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, compflags, IS_LONG, 0, "0") -+ZEND_END_ARG_INFO() -+ -+#if defined(HAVE_ENCRYPTION) -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_setEncryptionName, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0) -+	ZEND_ARG_TYPE_INFO(0, method, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, password, IS_STRING, 1, "null") -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_setEncryptionIndex, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO(0, method, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, password, IS_STRING, 1, "null") -+ZEND_END_ARG_INFO() -+#endif -+ -+#if defined(HAVE_PROGRESS_CALLBACK) -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_registerProgressCallback, 0, 2, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, rate, IS_DOUBLE, 0) -+	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0) -+ZEND_END_ARG_INFO() -+#endif -+ -+#if defined(HAVE_CANCEL_CALLBACK) -+ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_registerCancelCallback, 0, 1, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0) -+ZEND_END_ARG_INFO() -+#endif -+ -+#if defined(HAVE_METHOD_SUPPORTED) -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ZipArchive_isCompressionMethodSupported, 0, 1, _IS_BOOL, 0) -+	ZEND_ARG_TYPE_INFO(0, method, IS_LONG, 0) -+	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, enc, _IS_BOOL, 0, "true") -+ZEND_END_ARG_INFO() -+ -+#define arginfo_class_ZipArchive_isEncryptionMethodSupported arginfo_class_ZipArchive_isCompressionMethodSupported -+#endif -+ -+ZEND_FUNCTION(zip_open); -+ZEND_FUNCTION(zip_close); -+ZEND_FUNCTION(zip_read); -+ZEND_FUNCTION(zip_entry_open); -+ZEND_FUNCTION(zip_entry_close); -+ZEND_FUNCTION(zip_entry_read); -+ZEND_FUNCTION(zip_entry_name); -+ZEND_FUNCTION(zip_entry_compressedsize); -+ZEND_FUNCTION(zip_entry_filesize); -+ZEND_FUNCTION(zip_entry_compressionmethod); -+ZEND_METHOD(ZipArchive, open); -+ZEND_METHOD(ZipArchive, setPassword); -+ZEND_METHOD(ZipArchive, close); -+ZEND_METHOD(ZipArchive, count); -+ZEND_METHOD(ZipArchive, getStatusString); -+ZEND_METHOD(ZipArchive, clearError); -+ZEND_METHOD(ZipArchive, addEmptyDir); -+ZEND_METHOD(ZipArchive, addFromString); -+ZEND_METHOD(ZipArchive, addFile); -+ZEND_METHOD(ZipArchive, replaceFile); -+ZEND_METHOD(ZipArchive, addGlob); -+ZEND_METHOD(ZipArchive, addPattern); -+ZEND_METHOD(ZipArchive, renameIndex); -+ZEND_METHOD(ZipArchive, renameName); -+ZEND_METHOD(ZipArchive, setArchiveComment); -+ZEND_METHOD(ZipArchive, getArchiveComment); -+ZEND_METHOD(ZipArchive, setArchiveFlag); -+ZEND_METHOD(ZipArchive, getArchiveFlag); -+ZEND_METHOD(ZipArchive, setCommentIndex); -+ZEND_METHOD(ZipArchive, setCommentName); -+#if defined(HAVE_SET_MTIME) -+ZEND_METHOD(ZipArchive, setMtimeIndex); -+ZEND_METHOD(ZipArchive, setMtimeName); -+#endif -+ZEND_METHOD(ZipArchive, getCommentIndex); -+ZEND_METHOD(ZipArchive, getCommentName); -+ZEND_METHOD(ZipArchive, deleteIndex); -+ZEND_METHOD(ZipArchive, deleteName); -+ZEND_METHOD(ZipArchive, statName); -+ZEND_METHOD(ZipArchive, statIndex); -+ZEND_METHOD(ZipArchive, locateName); -+ZEND_METHOD(ZipArchive, getNameIndex); -+ZEND_METHOD(ZipArchive, unchangeArchive); -+ZEND_METHOD(ZipArchive, unchangeAll); -+ZEND_METHOD(ZipArchive, unchangeIndex); -+ZEND_METHOD(ZipArchive, unchangeName); -+ZEND_METHOD(ZipArchive, extractTo); -+ZEND_METHOD(ZipArchive, getFromName); -+ZEND_METHOD(ZipArchive, getFromIndex); -+ZEND_METHOD(ZipArchive, getStreamIndex); -+ZEND_METHOD(ZipArchive, getStreamName); -+ZEND_METHOD(ZipArchive, getStream); -+#if defined(ZIP_OPSYS_DEFAULT) -+ZEND_METHOD(ZipArchive, setExternalAttributesName); -+ZEND_METHOD(ZipArchive, setExternalAttributesIndex); -+ZEND_METHOD(ZipArchive, getExternalAttributesName); -+ZEND_METHOD(ZipArchive, getExternalAttributesIndex); -+#endif -+ZEND_METHOD(ZipArchive, setCompressionName); -+ZEND_METHOD(ZipArchive, setCompressionIndex); -+#if defined(HAVE_ENCRYPTION) -+ZEND_METHOD(ZipArchive, setEncryptionName); -+ZEND_METHOD(ZipArchive, setEncryptionIndex); -+#endif -+#if defined(HAVE_PROGRESS_CALLBACK) -+ZEND_METHOD(ZipArchive, registerProgressCallback); -+#endif -+#if defined(HAVE_CANCEL_CALLBACK) -+ZEND_METHOD(ZipArchive, registerCancelCallback); -+#endif -+#if defined(HAVE_METHOD_SUPPORTED) -+ZEND_METHOD(ZipArchive, isCompressionMethodSupported); -+ZEND_METHOD(ZipArchive, isEncryptionMethodSupported); -+#endif -+ -+static const zend_function_entry ext_functions[] = { -+	ZEND_RAW_FENTRY("zip_open", zif_zip_open, arginfo_zip_open, ZEND_ACC_DEPRECATED, NULL, NULL) -+	ZEND_RAW_FENTRY("zip_close", zif_zip_close, arginfo_zip_close, ZEND_ACC_DEPRECATED, NULL, NULL) -+	ZEND_RAW_FENTRY("zip_read", zif_zip_read, arginfo_zip_read, ZEND_ACC_DEPRECATED, NULL, NULL) -+	ZEND_RAW_FENTRY("zip_entry_open", zif_zip_entry_open, arginfo_zip_entry_open, ZEND_ACC_DEPRECATED, NULL, NULL) -+	ZEND_RAW_FENTRY("zip_entry_close", zif_zip_entry_close, arginfo_zip_entry_close, ZEND_ACC_DEPRECATED, NULL, NULL) -+	ZEND_RAW_FENTRY("zip_entry_read", zif_zip_entry_read, arginfo_zip_entry_read, ZEND_ACC_DEPRECATED, NULL, NULL) -+	ZEND_RAW_FENTRY("zip_entry_name", zif_zip_entry_name, arginfo_zip_entry_name, ZEND_ACC_DEPRECATED, NULL, NULL) -+	ZEND_RAW_FENTRY("zip_entry_compressedsize", zif_zip_entry_compressedsize, arginfo_zip_entry_compressedsize, ZEND_ACC_DEPRECATED, NULL, NULL) -+	ZEND_RAW_FENTRY("zip_entry_filesize", zif_zip_entry_filesize, arginfo_zip_entry_filesize, ZEND_ACC_DEPRECATED, NULL, NULL) -+	ZEND_RAW_FENTRY("zip_entry_compressionmethod", zif_zip_entry_compressionmethod, arginfo_zip_entry_compressionmethod, ZEND_ACC_DEPRECATED, NULL, NULL) -+	ZEND_FE_END -+}; -+ -+static const zend_function_entry class_ZipArchive_methods[] = { -+	ZEND_ME(ZipArchive, open, arginfo_class_ZipArchive_open, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, setPassword, arginfo_class_ZipArchive_setPassword, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, close, arginfo_class_ZipArchive_close, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, count, arginfo_class_ZipArchive_count, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, getStatusString, arginfo_class_ZipArchive_getStatusString, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, clearError, arginfo_class_ZipArchive_clearError, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, addEmptyDir, arginfo_class_ZipArchive_addEmptyDir, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, addFromString, arginfo_class_ZipArchive_addFromString, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, addFile, arginfo_class_ZipArchive_addFile, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, replaceFile, arginfo_class_ZipArchive_replaceFile, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, addGlob, arginfo_class_ZipArchive_addGlob, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, addPattern, arginfo_class_ZipArchive_addPattern, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, renameIndex, arginfo_class_ZipArchive_renameIndex, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, renameName, arginfo_class_ZipArchive_renameName, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, setArchiveComment, arginfo_class_ZipArchive_setArchiveComment, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, getArchiveComment, arginfo_class_ZipArchive_getArchiveComment, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, setArchiveFlag, arginfo_class_ZipArchive_setArchiveFlag, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, getArchiveFlag, arginfo_class_ZipArchive_getArchiveFlag, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, setCommentIndex, arginfo_class_ZipArchive_setCommentIndex, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, setCommentName, arginfo_class_ZipArchive_setCommentName, ZEND_ACC_PUBLIC) -+#if defined(HAVE_SET_MTIME) -+	ZEND_ME(ZipArchive, setMtimeIndex, arginfo_class_ZipArchive_setMtimeIndex, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, setMtimeName, arginfo_class_ZipArchive_setMtimeName, ZEND_ACC_PUBLIC) -+#endif -+	ZEND_ME(ZipArchive, getCommentIndex, arginfo_class_ZipArchive_getCommentIndex, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, getCommentName, arginfo_class_ZipArchive_getCommentName, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, deleteIndex, arginfo_class_ZipArchive_deleteIndex, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, deleteName, arginfo_class_ZipArchive_deleteName, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, statName, arginfo_class_ZipArchive_statName, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, statIndex, arginfo_class_ZipArchive_statIndex, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, locateName, arginfo_class_ZipArchive_locateName, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, getNameIndex, arginfo_class_ZipArchive_getNameIndex, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, unchangeArchive, arginfo_class_ZipArchive_unchangeArchive, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, unchangeAll, arginfo_class_ZipArchive_unchangeAll, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, unchangeIndex, arginfo_class_ZipArchive_unchangeIndex, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, unchangeName, arginfo_class_ZipArchive_unchangeName, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, extractTo, arginfo_class_ZipArchive_extractTo, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, getFromName, arginfo_class_ZipArchive_getFromName, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, getFromIndex, arginfo_class_ZipArchive_getFromIndex, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, getStreamIndex, arginfo_class_ZipArchive_getStreamIndex, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, getStreamName, arginfo_class_ZipArchive_getStreamName, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, getStream, arginfo_class_ZipArchive_getStream, ZEND_ACC_PUBLIC) -+#if defined(ZIP_OPSYS_DEFAULT) -+	ZEND_ME(ZipArchive, setExternalAttributesName, arginfo_class_ZipArchive_setExternalAttributesName, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, setExternalAttributesIndex, arginfo_class_ZipArchive_setExternalAttributesIndex, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, getExternalAttributesName, arginfo_class_ZipArchive_getExternalAttributesName, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, getExternalAttributesIndex, arginfo_class_ZipArchive_getExternalAttributesIndex, ZEND_ACC_PUBLIC) -+#endif -+	ZEND_ME(ZipArchive, setCompressionName, arginfo_class_ZipArchive_setCompressionName, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, setCompressionIndex, arginfo_class_ZipArchive_setCompressionIndex, ZEND_ACC_PUBLIC) -+#if defined(HAVE_ENCRYPTION) -+	ZEND_ME(ZipArchive, setEncryptionName, arginfo_class_ZipArchive_setEncryptionName, ZEND_ACC_PUBLIC) -+	ZEND_ME(ZipArchive, setEncryptionIndex, arginfo_class_ZipArchive_setEncryptionIndex, ZEND_ACC_PUBLIC) -+#endif -+#if defined(HAVE_PROGRESS_CALLBACK) -+	ZEND_ME(ZipArchive, registerProgressCallback, arginfo_class_ZipArchive_registerProgressCallback, ZEND_ACC_PUBLIC) -+#endif -+#if defined(HAVE_CANCEL_CALLBACK) -+	ZEND_ME(ZipArchive, registerCancelCallback, arginfo_class_ZipArchive_registerCancelCallback, ZEND_ACC_PUBLIC) -+#endif -+#if defined(HAVE_METHOD_SUPPORTED) -+	ZEND_ME(ZipArchive, isCompressionMethodSupported, arginfo_class_ZipArchive_isCompressionMethodSupported, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) -+	ZEND_ME(ZipArchive, isEncryptionMethodSupported, arginfo_class_ZipArchive_isEncryptionMethodSupported, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) -+#endif -+	ZEND_FE_END -+}; -+ -+static void register_php_zip_symbols(int module_number) -+{ -+ -+	zend_attribute *attribute_Deprecated_func_zip_open_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_open", sizeof("zip_open") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); -+	zval attribute_Deprecated_func_zip_open_0_arg0; -+	zend_string *attribute_Deprecated_func_zip_open_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_open_0_arg0, attribute_Deprecated_func_zip_open_0_arg0_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_open_0->args[0].value, &attribute_Deprecated_func_zip_open_0_arg0); -+	attribute_Deprecated_func_zip_open_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); -+	zval attribute_Deprecated_func_zip_open_0_arg1; -+	zend_string *attribute_Deprecated_func_zip_open_0_arg1_str = zend_string_init("use ZipArchive::open() instead", strlen("use ZipArchive::open() instead"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_open_0_arg1, attribute_Deprecated_func_zip_open_0_arg1_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_open_0->args[1].value, &attribute_Deprecated_func_zip_open_0_arg1); -+	attribute_Deprecated_func_zip_open_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -+ -+	zend_attribute *attribute_Deprecated_func_zip_close_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_close", sizeof("zip_close") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); -+	zval attribute_Deprecated_func_zip_close_0_arg0; -+	zend_string *attribute_Deprecated_func_zip_close_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_close_0_arg0, attribute_Deprecated_func_zip_close_0_arg0_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_close_0->args[0].value, &attribute_Deprecated_func_zip_close_0_arg0); -+	attribute_Deprecated_func_zip_close_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); -+	zval attribute_Deprecated_func_zip_close_0_arg1; -+	zend_string *attribute_Deprecated_func_zip_close_0_arg1_str = zend_string_init("use ZipArchive::close() instead", strlen("use ZipArchive::close() instead"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_close_0_arg1, attribute_Deprecated_func_zip_close_0_arg1_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_close_0->args[1].value, &attribute_Deprecated_func_zip_close_0_arg1); -+	attribute_Deprecated_func_zip_close_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -+ -+	zend_attribute *attribute_Deprecated_func_zip_read_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_read", sizeof("zip_read") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); -+	zval attribute_Deprecated_func_zip_read_0_arg0; -+	zend_string *attribute_Deprecated_func_zip_read_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_read_0_arg0, attribute_Deprecated_func_zip_read_0_arg0_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_read_0->args[0].value, &attribute_Deprecated_func_zip_read_0_arg0); -+	attribute_Deprecated_func_zip_read_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); -+	zval attribute_Deprecated_func_zip_read_0_arg1; -+	zend_string *attribute_Deprecated_func_zip_read_0_arg1_str = zend_string_init("use ZipArchive::statIndex() instead", strlen("use ZipArchive::statIndex() instead"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_read_0_arg1, attribute_Deprecated_func_zip_read_0_arg1_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_read_0->args[1].value, &attribute_Deprecated_func_zip_read_0_arg1); -+	attribute_Deprecated_func_zip_read_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -+ -+	zend_attribute *attribute_Deprecated_func_zip_entry_open_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_entry_open", sizeof("zip_entry_open") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 1); -+	zval attribute_Deprecated_func_zip_entry_open_0_arg0; -+	zend_string *attribute_Deprecated_func_zip_entry_open_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_open_0_arg0, attribute_Deprecated_func_zip_entry_open_0_arg0_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_open_0->args[0].value, &attribute_Deprecated_func_zip_entry_open_0_arg0); -+	attribute_Deprecated_func_zip_entry_open_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); -+ -+	zend_attribute *attribute_Deprecated_func_zip_entry_close_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_entry_close", sizeof("zip_entry_close") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 1); -+	zval attribute_Deprecated_func_zip_entry_close_0_arg0; -+	zend_string *attribute_Deprecated_func_zip_entry_close_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_close_0_arg0, attribute_Deprecated_func_zip_entry_close_0_arg0_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_close_0->args[0].value, &attribute_Deprecated_func_zip_entry_close_0_arg0); -+	attribute_Deprecated_func_zip_entry_close_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); -+ -+	zend_attribute *attribute_Deprecated_func_zip_entry_read_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_entry_read", sizeof("zip_entry_read") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); -+	zval attribute_Deprecated_func_zip_entry_read_0_arg0; -+	zend_string *attribute_Deprecated_func_zip_entry_read_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_read_0_arg0, attribute_Deprecated_func_zip_entry_read_0_arg0_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_read_0->args[0].value, &attribute_Deprecated_func_zip_entry_read_0_arg0); -+	attribute_Deprecated_func_zip_entry_read_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); -+	zval attribute_Deprecated_func_zip_entry_read_0_arg1; -+	zend_string *attribute_Deprecated_func_zip_entry_read_0_arg1_str = zend_string_init("use ZipArchive::getFromIndex() instead", strlen("use ZipArchive::getFromIndex() instead"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_read_0_arg1, attribute_Deprecated_func_zip_entry_read_0_arg1_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_read_0->args[1].value, &attribute_Deprecated_func_zip_entry_read_0_arg1); -+	attribute_Deprecated_func_zip_entry_read_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -+ -+	zend_attribute *attribute_Deprecated_func_zip_entry_name_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_entry_name", sizeof("zip_entry_name") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); -+	zval attribute_Deprecated_func_zip_entry_name_0_arg0; -+	zend_string *attribute_Deprecated_func_zip_entry_name_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_name_0_arg0, attribute_Deprecated_func_zip_entry_name_0_arg0_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_name_0->args[0].value, &attribute_Deprecated_func_zip_entry_name_0_arg0); -+	attribute_Deprecated_func_zip_entry_name_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); -+	zval attribute_Deprecated_func_zip_entry_name_0_arg1; -+	zend_string *attribute_Deprecated_func_zip_entry_name_0_arg1_str = zend_string_init("use ZipArchive::statIndex() instead", strlen("use ZipArchive::statIndex() instead"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_name_0_arg1, attribute_Deprecated_func_zip_entry_name_0_arg1_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_name_0->args[1].value, &attribute_Deprecated_func_zip_entry_name_0_arg1); -+	attribute_Deprecated_func_zip_entry_name_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -+ -+	zend_attribute *attribute_Deprecated_func_zip_entry_compressedsize_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_entry_compressedsize", sizeof("zip_entry_compressedsize") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); -+	zval attribute_Deprecated_func_zip_entry_compressedsize_0_arg0; -+	zend_string *attribute_Deprecated_func_zip_entry_compressedsize_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_compressedsize_0_arg0, attribute_Deprecated_func_zip_entry_compressedsize_0_arg0_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_compressedsize_0->args[0].value, &attribute_Deprecated_func_zip_entry_compressedsize_0_arg0); -+	attribute_Deprecated_func_zip_entry_compressedsize_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); -+	zval attribute_Deprecated_func_zip_entry_compressedsize_0_arg1; -+	zend_string *attribute_Deprecated_func_zip_entry_compressedsize_0_arg1_str = zend_string_init("use ZipArchive::statIndex() instead", strlen("use ZipArchive::statIndex() instead"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_compressedsize_0_arg1, attribute_Deprecated_func_zip_entry_compressedsize_0_arg1_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_compressedsize_0->args[1].value, &attribute_Deprecated_func_zip_entry_compressedsize_0_arg1); -+	attribute_Deprecated_func_zip_entry_compressedsize_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -+ -+	zend_attribute *attribute_Deprecated_func_zip_entry_filesize_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_entry_filesize", sizeof("zip_entry_filesize") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); -+	zval attribute_Deprecated_func_zip_entry_filesize_0_arg0; -+	zend_string *attribute_Deprecated_func_zip_entry_filesize_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_filesize_0_arg0, attribute_Deprecated_func_zip_entry_filesize_0_arg0_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_filesize_0->args[0].value, &attribute_Deprecated_func_zip_entry_filesize_0_arg0); -+	attribute_Deprecated_func_zip_entry_filesize_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); -+	zval attribute_Deprecated_func_zip_entry_filesize_0_arg1; -+	zend_string *attribute_Deprecated_func_zip_entry_filesize_0_arg1_str = zend_string_init("use ZipArchive::statIndex() instead", strlen("use ZipArchive::statIndex() instead"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_filesize_0_arg1, attribute_Deprecated_func_zip_entry_filesize_0_arg1_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_filesize_0->args[1].value, &attribute_Deprecated_func_zip_entry_filesize_0_arg1); -+	attribute_Deprecated_func_zip_entry_filesize_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -+ -+	zend_attribute *attribute_Deprecated_func_zip_entry_compressionmethod_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_entry_compressionmethod", sizeof("zip_entry_compressionmethod") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); -+	zval attribute_Deprecated_func_zip_entry_compressionmethod_0_arg0; -+	zend_string *attribute_Deprecated_func_zip_entry_compressionmethod_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_compressionmethod_0_arg0, attribute_Deprecated_func_zip_entry_compressionmethod_0_arg0_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_compressionmethod_0->args[0].value, &attribute_Deprecated_func_zip_entry_compressionmethod_0_arg0); -+	attribute_Deprecated_func_zip_entry_compressionmethod_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); -+	zval attribute_Deprecated_func_zip_entry_compressionmethod_0_arg1; -+	zend_string *attribute_Deprecated_func_zip_entry_compressionmethod_0_arg1_str = zend_string_init("use ZipArchive::statIndex() instead", strlen("use ZipArchive::statIndex() instead"), 1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_compressionmethod_0_arg1, attribute_Deprecated_func_zip_entry_compressionmethod_0_arg1_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_compressionmethod_0->args[1].value, &attribute_Deprecated_func_zip_entry_compressionmethod_0_arg1); -+	attribute_Deprecated_func_zip_entry_compressionmethod_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -+} -+ -+static zend_class_entry *register_class_ZipArchive(zend_class_entry *class_entry_Countable) -+{ -+	zend_class_entry ce, *class_entry; -+ -+	INIT_CLASS_ENTRY(ce, "ZipArchive", class_ZipArchive_methods); -+	class_entry = zend_register_internal_class_with_flags(&ce, NULL, 0); -+	zend_class_implements(class_entry, 1, class_entry_Countable); -+ -+	zval const_CREATE_value; -+	ZVAL_LONG(&const_CREATE_value, ZIP_CREATE); -+	zend_string *const_CREATE_name = zend_string_init_interned("CREATE", sizeof("CREATE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CREATE_name, &const_CREATE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CREATE_name); -+ -+	zval const_EXCL_value; -+	ZVAL_LONG(&const_EXCL_value, ZIP_EXCL); -+	zend_string *const_EXCL_name = zend_string_init_interned("EXCL", sizeof("EXCL") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_EXCL_name, &const_EXCL_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_EXCL_name); -+ -+	zval const_CHECKCONS_value; -+	ZVAL_LONG(&const_CHECKCONS_value, ZIP_CHECKCONS); -+	zend_string *const_CHECKCONS_name = zend_string_init_interned("CHECKCONS", sizeof("CHECKCONS") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CHECKCONS_name, &const_CHECKCONS_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CHECKCONS_name); -+ -+	zval const_OVERWRITE_value; -+	ZVAL_LONG(&const_OVERWRITE_value, ZIP_OVERWRITE); -+	zend_string *const_OVERWRITE_name = zend_string_init_interned("OVERWRITE", sizeof("OVERWRITE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OVERWRITE_name, &const_OVERWRITE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OVERWRITE_name); -+#if defined(ZIP_RDONLY) -+ -+	zval const_RDONLY_value; -+	ZVAL_LONG(&const_RDONLY_value, ZIP_RDONLY); -+	zend_string *const_RDONLY_name = zend_string_init_interned("RDONLY", sizeof("RDONLY") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_RDONLY_name, &const_RDONLY_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_RDONLY_name); -+#endif -+ -+	zval const_FL_NOCASE_value; -+	ZVAL_LONG(&const_FL_NOCASE_value, ZIP_FL_NOCASE); -+	zend_string *const_FL_NOCASE_name = zend_string_init_interned("FL_NOCASE", sizeof("FL_NOCASE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_FL_NOCASE_name, &const_FL_NOCASE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_NOCASE_name); -+ -+	zval const_FL_NODIR_value; -+	ZVAL_LONG(&const_FL_NODIR_value, ZIP_FL_NODIR); -+	zend_string *const_FL_NODIR_name = zend_string_init_interned("FL_NODIR", sizeof("FL_NODIR") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_FL_NODIR_name, &const_FL_NODIR_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_NODIR_name); -+ -+	zval const_FL_COMPRESSED_value; -+	ZVAL_LONG(&const_FL_COMPRESSED_value, ZIP_FL_COMPRESSED); -+	zend_string *const_FL_COMPRESSED_name = zend_string_init_interned("FL_COMPRESSED", sizeof("FL_COMPRESSED") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_FL_COMPRESSED_name, &const_FL_COMPRESSED_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_COMPRESSED_name); -+ -+	zval const_FL_UNCHANGED_value; -+	ZVAL_LONG(&const_FL_UNCHANGED_value, ZIP_FL_UNCHANGED); -+	zend_string *const_FL_UNCHANGED_name = zend_string_init_interned("FL_UNCHANGED", sizeof("FL_UNCHANGED") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_FL_UNCHANGED_name, &const_FL_UNCHANGED_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_UNCHANGED_name); -+#if defined(ZIP_FL_RECOMPRESS) -+ -+	zval const_FL_RECOMPRESS_value; -+	ZVAL_LONG(&const_FL_RECOMPRESS_value, ZIP_FL_RECOMPRESS); -+	zend_string *const_FL_RECOMPRESS_name = zend_string_init_interned("FL_RECOMPRESS", sizeof("FL_RECOMPRESS") - 1, 1); -+	zend_class_constant *const_FL_RECOMPRESS = zend_declare_typed_class_constant(class_entry, const_FL_RECOMPRESS_name, &const_FL_RECOMPRESS_value, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_RECOMPRESS_name); -+#endif -+ -+	zval const_FL_ENCRYPTED_value; -+	ZVAL_LONG(&const_FL_ENCRYPTED_value, ZIP_FL_ENCRYPTED); -+	zend_string *const_FL_ENCRYPTED_name = zend_string_init_interned("FL_ENCRYPTED", sizeof("FL_ENCRYPTED") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_FL_ENCRYPTED_name, &const_FL_ENCRYPTED_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_ENCRYPTED_name); -+ -+	zval const_FL_OVERWRITE_value; -+	ZVAL_LONG(&const_FL_OVERWRITE_value, ZIP_FL_OVERWRITE); -+	zend_string *const_FL_OVERWRITE_name = zend_string_init_interned("FL_OVERWRITE", sizeof("FL_OVERWRITE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_FL_OVERWRITE_name, &const_FL_OVERWRITE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_OVERWRITE_name); -+ -+	zval const_FL_LOCAL_value; -+	ZVAL_LONG(&const_FL_LOCAL_value, ZIP_FL_LOCAL); -+	zend_string *const_FL_LOCAL_name = zend_string_init_interned("FL_LOCAL", sizeof("FL_LOCAL") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_FL_LOCAL_name, &const_FL_LOCAL_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_LOCAL_name); -+ -+	zval const_FL_CENTRAL_value; -+	ZVAL_LONG(&const_FL_CENTRAL_value, ZIP_FL_CENTRAL); -+	zend_string *const_FL_CENTRAL_name = zend_string_init_interned("FL_CENTRAL", sizeof("FL_CENTRAL") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_FL_CENTRAL_name, &const_FL_CENTRAL_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_CENTRAL_name); -+ -+	zval const_FL_ENC_GUESS_value; -+	ZVAL_LONG(&const_FL_ENC_GUESS_value, ZIP_FL_ENC_GUESS); -+	zend_string *const_FL_ENC_GUESS_name = zend_string_init_interned("FL_ENC_GUESS", sizeof("FL_ENC_GUESS") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_FL_ENC_GUESS_name, &const_FL_ENC_GUESS_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_ENC_GUESS_name); -+ -+	zval const_FL_ENC_RAW_value; -+	ZVAL_LONG(&const_FL_ENC_RAW_value, ZIP_FL_ENC_RAW); -+	zend_string *const_FL_ENC_RAW_name = zend_string_init_interned("FL_ENC_RAW", sizeof("FL_ENC_RAW") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_FL_ENC_RAW_name, &const_FL_ENC_RAW_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_ENC_RAW_name); -+ -+	zval const_FL_ENC_STRICT_value; -+	ZVAL_LONG(&const_FL_ENC_STRICT_value, ZIP_FL_ENC_STRICT); -+	zend_string *const_FL_ENC_STRICT_name = zend_string_init_interned("FL_ENC_STRICT", sizeof("FL_ENC_STRICT") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_FL_ENC_STRICT_name, &const_FL_ENC_STRICT_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_ENC_STRICT_name); -+ -+	zval const_FL_ENC_UTF_8_value; -+	ZVAL_LONG(&const_FL_ENC_UTF_8_value, ZIP_FL_ENC_UTF_8); -+	zend_string *const_FL_ENC_UTF_8_name = zend_string_init_interned("FL_ENC_UTF_8", sizeof("FL_ENC_UTF_8") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_FL_ENC_UTF_8_name, &const_FL_ENC_UTF_8_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_ENC_UTF_8_name); -+ -+	zval const_FL_ENC_CP437_value; -+	ZVAL_LONG(&const_FL_ENC_CP437_value, ZIP_FL_ENC_CP437); -+	zend_string *const_FL_ENC_CP437_name = zend_string_init_interned("FL_ENC_CP437", sizeof("FL_ENC_CP437") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_FL_ENC_CP437_name, &const_FL_ENC_CP437_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_ENC_CP437_name); -+ -+	zval const_FL_OPEN_FILE_NOW_value; -+	ZVAL_LONG(&const_FL_OPEN_FILE_NOW_value, ZIP_FL_OPEN_FILE_NOW); -+	zend_string *const_FL_OPEN_FILE_NOW_name = zend_string_init_interned("FL_OPEN_FILE_NOW", sizeof("FL_OPEN_FILE_NOW") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_FL_OPEN_FILE_NOW_name, &const_FL_OPEN_FILE_NOW_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_FL_OPEN_FILE_NOW_name); -+ -+	zval const_CM_DEFAULT_value; -+	ZVAL_LONG(&const_CM_DEFAULT_value, ZIP_CM_DEFAULT); -+	zend_string *const_CM_DEFAULT_name = zend_string_init_interned("CM_DEFAULT", sizeof("CM_DEFAULT") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_DEFAULT_name, &const_CM_DEFAULT_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_DEFAULT_name); -+ -+	zval const_CM_STORE_value; -+	ZVAL_LONG(&const_CM_STORE_value, ZIP_CM_STORE); -+	zend_string *const_CM_STORE_name = zend_string_init_interned("CM_STORE", sizeof("CM_STORE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_STORE_name, &const_CM_STORE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_STORE_name); -+ -+	zval const_CM_SHRINK_value; -+	ZVAL_LONG(&const_CM_SHRINK_value, ZIP_CM_SHRINK); -+	zend_string *const_CM_SHRINK_name = zend_string_init_interned("CM_SHRINK", sizeof("CM_SHRINK") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_SHRINK_name, &const_CM_SHRINK_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_SHRINK_name); -+ -+	zval const_CM_REDUCE_1_value; -+	ZVAL_LONG(&const_CM_REDUCE_1_value, ZIP_CM_REDUCE_1); -+	zend_string *const_CM_REDUCE_1_name = zend_string_init_interned("CM_REDUCE_1", sizeof("CM_REDUCE_1") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_REDUCE_1_name, &const_CM_REDUCE_1_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_REDUCE_1_name); -+ -+	zval const_CM_REDUCE_2_value; -+	ZVAL_LONG(&const_CM_REDUCE_2_value, ZIP_CM_REDUCE_2); -+	zend_string *const_CM_REDUCE_2_name = zend_string_init_interned("CM_REDUCE_2", sizeof("CM_REDUCE_2") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_REDUCE_2_name, &const_CM_REDUCE_2_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_REDUCE_2_name); -+ -+	zval const_CM_REDUCE_3_value; -+	ZVAL_LONG(&const_CM_REDUCE_3_value, ZIP_CM_REDUCE_3); -+	zend_string *const_CM_REDUCE_3_name = zend_string_init_interned("CM_REDUCE_3", sizeof("CM_REDUCE_3") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_REDUCE_3_name, &const_CM_REDUCE_3_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_REDUCE_3_name); -+ -+	zval const_CM_REDUCE_4_value; -+	ZVAL_LONG(&const_CM_REDUCE_4_value, ZIP_CM_REDUCE_4); -+	zend_string *const_CM_REDUCE_4_name = zend_string_init_interned("CM_REDUCE_4", sizeof("CM_REDUCE_4") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_REDUCE_4_name, &const_CM_REDUCE_4_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_REDUCE_4_name); -+ -+	zval const_CM_IMPLODE_value; -+	ZVAL_LONG(&const_CM_IMPLODE_value, ZIP_CM_IMPLODE); -+	zend_string *const_CM_IMPLODE_name = zend_string_init_interned("CM_IMPLODE", sizeof("CM_IMPLODE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_IMPLODE_name, &const_CM_IMPLODE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_IMPLODE_name); -+ -+	zval const_CM_DEFLATE_value; -+	ZVAL_LONG(&const_CM_DEFLATE_value, ZIP_CM_DEFLATE); -+	zend_string *const_CM_DEFLATE_name = zend_string_init_interned("CM_DEFLATE", sizeof("CM_DEFLATE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_DEFLATE_name, &const_CM_DEFLATE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_DEFLATE_name); -+ -+	zval const_CM_DEFLATE64_value; -+	ZVAL_LONG(&const_CM_DEFLATE64_value, ZIP_CM_DEFLATE64); -+	zend_string *const_CM_DEFLATE64_name = zend_string_init_interned("CM_DEFLATE64", sizeof("CM_DEFLATE64") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_DEFLATE64_name, &const_CM_DEFLATE64_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_DEFLATE64_name); -+ -+	zval const_CM_PKWARE_IMPLODE_value; -+	ZVAL_LONG(&const_CM_PKWARE_IMPLODE_value, ZIP_CM_PKWARE_IMPLODE); -+	zend_string *const_CM_PKWARE_IMPLODE_name = zend_string_init_interned("CM_PKWARE_IMPLODE", sizeof("CM_PKWARE_IMPLODE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_PKWARE_IMPLODE_name, &const_CM_PKWARE_IMPLODE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_PKWARE_IMPLODE_name); -+ -+	zval const_CM_BZIP2_value; -+	ZVAL_LONG(&const_CM_BZIP2_value, ZIP_CM_BZIP2); -+	zend_string *const_CM_BZIP2_name = zend_string_init_interned("CM_BZIP2", sizeof("CM_BZIP2") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_BZIP2_name, &const_CM_BZIP2_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_BZIP2_name); -+ -+	zval const_CM_LZMA_value; -+	ZVAL_LONG(&const_CM_LZMA_value, ZIP_CM_LZMA); -+	zend_string *const_CM_LZMA_name = zend_string_init_interned("CM_LZMA", sizeof("CM_LZMA") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_LZMA_name, &const_CM_LZMA_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_LZMA_name); -+#if defined(ZIP_CM_LZMA2) -+ -+	zval const_CM_LZMA2_value; -+	ZVAL_LONG(&const_CM_LZMA2_value, ZIP_CM_LZMA2); -+	zend_string *const_CM_LZMA2_name = zend_string_init_interned("CM_LZMA2", sizeof("CM_LZMA2") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_LZMA2_name, &const_CM_LZMA2_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_LZMA2_name); -+#endif -+#if defined(ZIP_CM_ZSTD) -+ -+	zval const_CM_ZSTD_value; -+	ZVAL_LONG(&const_CM_ZSTD_value, ZIP_CM_ZSTD); -+	zend_string *const_CM_ZSTD_name = zend_string_init_interned("CM_ZSTD", sizeof("CM_ZSTD") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_ZSTD_name, &const_CM_ZSTD_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_ZSTD_name); -+#endif -+#if defined(ZIP_CM_XZ) -+ -+	zval const_CM_XZ_value; -+	ZVAL_LONG(&const_CM_XZ_value, ZIP_CM_XZ); -+	zend_string *const_CM_XZ_name = zend_string_init_interned("CM_XZ", sizeof("CM_XZ") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_XZ_name, &const_CM_XZ_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_XZ_name); -+#endif -+ -+	zval const_CM_TERSE_value; -+	ZVAL_LONG(&const_CM_TERSE_value, ZIP_CM_TERSE); -+	zend_string *const_CM_TERSE_name = zend_string_init_interned("CM_TERSE", sizeof("CM_TERSE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_TERSE_name, &const_CM_TERSE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_TERSE_name); -+ -+	zval const_CM_LZ77_value; -+	ZVAL_LONG(&const_CM_LZ77_value, ZIP_CM_LZ77); -+	zend_string *const_CM_LZ77_name = zend_string_init_interned("CM_LZ77", sizeof("CM_LZ77") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_LZ77_name, &const_CM_LZ77_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_LZ77_name); -+ -+	zval const_CM_WAVPACK_value; -+	ZVAL_LONG(&const_CM_WAVPACK_value, ZIP_CM_WAVPACK); -+	zend_string *const_CM_WAVPACK_name = zend_string_init_interned("CM_WAVPACK", sizeof("CM_WAVPACK") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_WAVPACK_name, &const_CM_WAVPACK_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_WAVPACK_name); -+ -+	zval const_CM_PPMD_value; -+	ZVAL_LONG(&const_CM_PPMD_value, ZIP_CM_PPMD); -+	zend_string *const_CM_PPMD_name = zend_string_init_interned("CM_PPMD", sizeof("CM_PPMD") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_CM_PPMD_name, &const_CM_PPMD_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_CM_PPMD_name); -+ -+	zval const_ER_OK_value; -+	ZVAL_LONG(&const_ER_OK_value, ZIP_ER_OK); -+	zend_string *const_ER_OK_name = zend_string_init_interned("ER_OK", sizeof("ER_OK") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_OK_name, &const_ER_OK_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_OK_name); -+ -+	zval const_ER_MULTIDISK_value; -+	ZVAL_LONG(&const_ER_MULTIDISK_value, ZIP_ER_MULTIDISK); -+	zend_string *const_ER_MULTIDISK_name = zend_string_init_interned("ER_MULTIDISK", sizeof("ER_MULTIDISK") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_MULTIDISK_name, &const_ER_MULTIDISK_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_MULTIDISK_name); -+ -+	zval const_ER_RENAME_value; -+	ZVAL_LONG(&const_ER_RENAME_value, ZIP_ER_RENAME); -+	zend_string *const_ER_RENAME_name = zend_string_init_interned("ER_RENAME", sizeof("ER_RENAME") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_RENAME_name, &const_ER_RENAME_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_RENAME_name); -+ -+	zval const_ER_CLOSE_value; -+	ZVAL_LONG(&const_ER_CLOSE_value, ZIP_ER_CLOSE); -+	zend_string *const_ER_CLOSE_name = zend_string_init_interned("ER_CLOSE", sizeof("ER_CLOSE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_CLOSE_name, &const_ER_CLOSE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_CLOSE_name); -+ -+	zval const_ER_SEEK_value; -+	ZVAL_LONG(&const_ER_SEEK_value, ZIP_ER_SEEK); -+	zend_string *const_ER_SEEK_name = zend_string_init_interned("ER_SEEK", sizeof("ER_SEEK") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_SEEK_name, &const_ER_SEEK_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_SEEK_name); -+ -+	zval const_ER_READ_value; -+	ZVAL_LONG(&const_ER_READ_value, ZIP_ER_READ); -+	zend_string *const_ER_READ_name = zend_string_init_interned("ER_READ", sizeof("ER_READ") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_READ_name, &const_ER_READ_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_READ_name); -+ -+	zval const_ER_WRITE_value; -+	ZVAL_LONG(&const_ER_WRITE_value, ZIP_ER_WRITE); -+	zend_string *const_ER_WRITE_name = zend_string_init_interned("ER_WRITE", sizeof("ER_WRITE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_WRITE_name, &const_ER_WRITE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_WRITE_name); -+ -+	zval const_ER_CRC_value; -+	ZVAL_LONG(&const_ER_CRC_value, ZIP_ER_CRC); -+	zend_string *const_ER_CRC_name = zend_string_init_interned("ER_CRC", sizeof("ER_CRC") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_CRC_name, &const_ER_CRC_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_CRC_name); -+ -+	zval const_ER_ZIPCLOSED_value; -+	ZVAL_LONG(&const_ER_ZIPCLOSED_value, ZIP_ER_ZIPCLOSED); -+	zend_string *const_ER_ZIPCLOSED_name = zend_string_init_interned("ER_ZIPCLOSED", sizeof("ER_ZIPCLOSED") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_ZIPCLOSED_name, &const_ER_ZIPCLOSED_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_ZIPCLOSED_name); -+ -+	zval const_ER_NOENT_value; -+	ZVAL_LONG(&const_ER_NOENT_value, ZIP_ER_NOENT); -+	zend_string *const_ER_NOENT_name = zend_string_init_interned("ER_NOENT", sizeof("ER_NOENT") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_NOENT_name, &const_ER_NOENT_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_NOENT_name); -+ -+	zval const_ER_EXISTS_value; -+	ZVAL_LONG(&const_ER_EXISTS_value, ZIP_ER_EXISTS); -+	zend_string *const_ER_EXISTS_name = zend_string_init_interned("ER_EXISTS", sizeof("ER_EXISTS") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_EXISTS_name, &const_ER_EXISTS_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_EXISTS_name); -+ -+	zval const_ER_OPEN_value; -+	ZVAL_LONG(&const_ER_OPEN_value, ZIP_ER_OPEN); -+	zend_string *const_ER_OPEN_name = zend_string_init_interned("ER_OPEN", sizeof("ER_OPEN") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_OPEN_name, &const_ER_OPEN_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_OPEN_name); -+ -+	zval const_ER_TMPOPEN_value; -+	ZVAL_LONG(&const_ER_TMPOPEN_value, ZIP_ER_TMPOPEN); -+	zend_string *const_ER_TMPOPEN_name = zend_string_init_interned("ER_TMPOPEN", sizeof("ER_TMPOPEN") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_TMPOPEN_name, &const_ER_TMPOPEN_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_TMPOPEN_name); -+ -+	zval const_ER_ZLIB_value; -+	ZVAL_LONG(&const_ER_ZLIB_value, ZIP_ER_ZLIB); -+	zend_string *const_ER_ZLIB_name = zend_string_init_interned("ER_ZLIB", sizeof("ER_ZLIB") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_ZLIB_name, &const_ER_ZLIB_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_ZLIB_name); -+ -+	zval const_ER_MEMORY_value; -+	ZVAL_LONG(&const_ER_MEMORY_value, ZIP_ER_MEMORY); -+	zend_string *const_ER_MEMORY_name = zend_string_init_interned("ER_MEMORY", sizeof("ER_MEMORY") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_MEMORY_name, &const_ER_MEMORY_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_MEMORY_name); -+ -+	zval const_ER_CHANGED_value; -+	ZVAL_LONG(&const_ER_CHANGED_value, ZIP_ER_CHANGED); -+	zend_string *const_ER_CHANGED_name = zend_string_init_interned("ER_CHANGED", sizeof("ER_CHANGED") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_CHANGED_name, &const_ER_CHANGED_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_CHANGED_name); -+ -+	zval const_ER_COMPNOTSUPP_value; -+	ZVAL_LONG(&const_ER_COMPNOTSUPP_value, ZIP_ER_COMPNOTSUPP); -+	zend_string *const_ER_COMPNOTSUPP_name = zend_string_init_interned("ER_COMPNOTSUPP", sizeof("ER_COMPNOTSUPP") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_COMPNOTSUPP_name, &const_ER_COMPNOTSUPP_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_COMPNOTSUPP_name); -+ -+	zval const_ER_EOF_value; -+	ZVAL_LONG(&const_ER_EOF_value, ZIP_ER_EOF); -+	zend_string *const_ER_EOF_name = zend_string_init_interned("ER_EOF", sizeof("ER_EOF") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_EOF_name, &const_ER_EOF_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_EOF_name); -+ -+	zval const_ER_INVAL_value; -+	ZVAL_LONG(&const_ER_INVAL_value, ZIP_ER_INVAL); -+	zend_string *const_ER_INVAL_name = zend_string_init_interned("ER_INVAL", sizeof("ER_INVAL") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_INVAL_name, &const_ER_INVAL_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_INVAL_name); -+ -+	zval const_ER_NOZIP_value; -+	ZVAL_LONG(&const_ER_NOZIP_value, ZIP_ER_NOZIP); -+	zend_string *const_ER_NOZIP_name = zend_string_init_interned("ER_NOZIP", sizeof("ER_NOZIP") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_NOZIP_name, &const_ER_NOZIP_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_NOZIP_name); -+ -+	zval const_ER_INTERNAL_value; -+	ZVAL_LONG(&const_ER_INTERNAL_value, ZIP_ER_INTERNAL); -+	zend_string *const_ER_INTERNAL_name = zend_string_init_interned("ER_INTERNAL", sizeof("ER_INTERNAL") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_INTERNAL_name, &const_ER_INTERNAL_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_INTERNAL_name); -+ -+	zval const_ER_INCONS_value; -+	ZVAL_LONG(&const_ER_INCONS_value, ZIP_ER_INCONS); -+	zend_string *const_ER_INCONS_name = zend_string_init_interned("ER_INCONS", sizeof("ER_INCONS") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_INCONS_name, &const_ER_INCONS_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_INCONS_name); -+ -+	zval const_ER_REMOVE_value; -+	ZVAL_LONG(&const_ER_REMOVE_value, ZIP_ER_REMOVE); -+	zend_string *const_ER_REMOVE_name = zend_string_init_interned("ER_REMOVE", sizeof("ER_REMOVE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_REMOVE_name, &const_ER_REMOVE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_REMOVE_name); -+ -+	zval const_ER_DELETED_value; -+	ZVAL_LONG(&const_ER_DELETED_value, ZIP_ER_DELETED); -+	zend_string *const_ER_DELETED_name = zend_string_init_interned("ER_DELETED", sizeof("ER_DELETED") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_DELETED_name, &const_ER_DELETED_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_DELETED_name); -+ -+	zval const_ER_ENCRNOTSUPP_value; -+	ZVAL_LONG(&const_ER_ENCRNOTSUPP_value, ZIP_ER_ENCRNOTSUPP); -+	zend_string *const_ER_ENCRNOTSUPP_name = zend_string_init_interned("ER_ENCRNOTSUPP", sizeof("ER_ENCRNOTSUPP") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_ENCRNOTSUPP_name, &const_ER_ENCRNOTSUPP_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_ENCRNOTSUPP_name); -+ -+	zval const_ER_RDONLY_value; -+	ZVAL_LONG(&const_ER_RDONLY_value, ZIP_ER_RDONLY); -+	zend_string *const_ER_RDONLY_name = zend_string_init_interned("ER_RDONLY", sizeof("ER_RDONLY") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_RDONLY_name, &const_ER_RDONLY_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_RDONLY_name); -+ -+	zval const_ER_NOPASSWD_value; -+	ZVAL_LONG(&const_ER_NOPASSWD_value, ZIP_ER_NOPASSWD); -+	zend_string *const_ER_NOPASSWD_name = zend_string_init_interned("ER_NOPASSWD", sizeof("ER_NOPASSWD") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_NOPASSWD_name, &const_ER_NOPASSWD_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_NOPASSWD_name); -+ -+	zval const_ER_WRONGPASSWD_value; -+	ZVAL_LONG(&const_ER_WRONGPASSWD_value, ZIP_ER_WRONGPASSWD); -+	zend_string *const_ER_WRONGPASSWD_name = zend_string_init_interned("ER_WRONGPASSWD", sizeof("ER_WRONGPASSWD") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_WRONGPASSWD_name, &const_ER_WRONGPASSWD_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_WRONGPASSWD_name); -+#if defined(ZIP_ER_OPNOTSUPP) -+ -+	zval const_ER_OPNOTSUPP_value; -+	ZVAL_LONG(&const_ER_OPNOTSUPP_value, ZIP_ER_OPNOTSUPP); -+	zend_string *const_ER_OPNOTSUPP_name = zend_string_init_interned("ER_OPNOTSUPP", sizeof("ER_OPNOTSUPP") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_OPNOTSUPP_name, &const_ER_OPNOTSUPP_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_OPNOTSUPP_name); -+#endif -+#if defined(ZIP_ER_INUSE) -+ -+	zval const_ER_INUSE_value; -+	ZVAL_LONG(&const_ER_INUSE_value, ZIP_ER_INUSE); -+	zend_string *const_ER_INUSE_name = zend_string_init_interned("ER_INUSE", sizeof("ER_INUSE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_INUSE_name, &const_ER_INUSE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_INUSE_name); -+#endif -+#if defined(ZIP_ER_TELL) -+ -+	zval const_ER_TELL_value; -+	ZVAL_LONG(&const_ER_TELL_value, ZIP_ER_TELL); -+	zend_string *const_ER_TELL_name = zend_string_init_interned("ER_TELL", sizeof("ER_TELL") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_TELL_name, &const_ER_TELL_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_TELL_name); -+#endif -+#if defined(ZIP_ER_COMPRESSED_DATA) -+ -+	zval const_ER_COMPRESSED_DATA_value; -+	ZVAL_LONG(&const_ER_COMPRESSED_DATA_value, ZIP_ER_COMPRESSED_DATA); -+	zend_string *const_ER_COMPRESSED_DATA_name = zend_string_init_interned("ER_COMPRESSED_DATA", sizeof("ER_COMPRESSED_DATA") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_COMPRESSED_DATA_name, &const_ER_COMPRESSED_DATA_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_COMPRESSED_DATA_name); -+#endif -+#if defined(ZIP_ER_CANCELLED) -+ -+	zval const_ER_CANCELLED_value; -+	ZVAL_LONG(&const_ER_CANCELLED_value, ZIP_ER_CANCELLED); -+	zend_string *const_ER_CANCELLED_name = zend_string_init_interned("ER_CANCELLED", sizeof("ER_CANCELLED") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_CANCELLED_name, &const_ER_CANCELLED_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_CANCELLED_name); -+#endif -+#if defined(ZIP_ER_DATA_LENGTH) -+ -+	zval const_ER_DATA_LENGTH_value; -+	ZVAL_LONG(&const_ER_DATA_LENGTH_value, ZIP_ER_DATA_LENGTH); -+	zend_string *const_ER_DATA_LENGTH_name = zend_string_init_interned("ER_DATA_LENGTH", sizeof("ER_DATA_LENGTH") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_DATA_LENGTH_name, &const_ER_DATA_LENGTH_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_DATA_LENGTH_name); -+#endif -+#if defined(ZIP_ER_NOT_ALLOWED) -+ -+	zval const_ER_NOT_ALLOWED_value; -+	ZVAL_LONG(&const_ER_NOT_ALLOWED_value, ZIP_ER_NOT_ALLOWED); -+	zend_string *const_ER_NOT_ALLOWED_name = zend_string_init_interned("ER_NOT_ALLOWED", sizeof("ER_NOT_ALLOWED") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_NOT_ALLOWED_name, &const_ER_NOT_ALLOWED_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_NOT_ALLOWED_name); -+#endif -+#if defined(ZIP_ER_TRUNCATED_ZIP) -+ -+	zval const_ER_TRUNCATED_ZIP_value; -+	ZVAL_LONG(&const_ER_TRUNCATED_ZIP_value, ZIP_ER_TRUNCATED_ZIP); -+	zend_string *const_ER_TRUNCATED_ZIP_name = zend_string_init_interned("ER_TRUNCATED_ZIP", sizeof("ER_TRUNCATED_ZIP") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_ER_TRUNCATED_ZIP_name, &const_ER_TRUNCATED_ZIP_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_ER_TRUNCATED_ZIP_name); -+#endif -+#if defined(ZIP_AFL_RDONLY) -+ -+	zval const_AFL_RDONLY_value; -+	ZVAL_LONG(&const_AFL_RDONLY_value, ZIP_AFL_RDONLY); -+	zend_string *const_AFL_RDONLY_name = zend_string_init_interned("AFL_RDONLY", sizeof("AFL_RDONLY") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_AFL_RDONLY_name, &const_AFL_RDONLY_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_AFL_RDONLY_name); -+#endif -+#if defined(ZIP_AFL_IS_TORRENTZIP) -+ -+	zval const_AFL_IS_TORRENTZIP_value; -+	ZVAL_LONG(&const_AFL_IS_TORRENTZIP_value, ZIP_AFL_IS_TORRENTZIP); -+	zend_string *const_AFL_IS_TORRENTZIP_name = zend_string_init_interned("AFL_IS_TORRENTZIP", sizeof("AFL_IS_TORRENTZIP") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_AFL_IS_TORRENTZIP_name, &const_AFL_IS_TORRENTZIP_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_AFL_IS_TORRENTZIP_name); -+#endif -+#if defined(ZIP_AFL_WANT_TORRENTZIP) -+ -+	zval const_AFL_WANT_TORRENTZIP_value; -+	ZVAL_LONG(&const_AFL_WANT_TORRENTZIP_value, ZIP_AFL_WANT_TORRENTZIP); -+	zend_string *const_AFL_WANT_TORRENTZIP_name = zend_string_init_interned("AFL_WANT_TORRENTZIP", sizeof("AFL_WANT_TORRENTZIP") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_AFL_WANT_TORRENTZIP_name, &const_AFL_WANT_TORRENTZIP_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_AFL_WANT_TORRENTZIP_name); -+#endif -+#if defined(ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE) -+ -+	zval const_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE_value; -+	ZVAL_LONG(&const_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE_value, ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE); -+	zend_string *const_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE_name = zend_string_init_interned("AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE", sizeof("AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE_name, &const_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE_name); -+#endif -+#if defined(ZIP_OPSYS_DEFAULT) -+ -+	zval const_OPSYS_DOS_value; -+	ZVAL_LONG(&const_OPSYS_DOS_value, ZIP_OPSYS_DOS); -+	zend_string *const_OPSYS_DOS_name = zend_string_init_interned("OPSYS_DOS", sizeof("OPSYS_DOS") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_DOS_name, &const_OPSYS_DOS_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_DOS_name); -+ -+	zval const_OPSYS_AMIGA_value; -+	ZVAL_LONG(&const_OPSYS_AMIGA_value, ZIP_OPSYS_AMIGA); -+	zend_string *const_OPSYS_AMIGA_name = zend_string_init_interned("OPSYS_AMIGA", sizeof("OPSYS_AMIGA") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_AMIGA_name, &const_OPSYS_AMIGA_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_AMIGA_name); -+ -+	zval const_OPSYS_OPENVMS_value; -+	ZVAL_LONG(&const_OPSYS_OPENVMS_value, ZIP_OPSYS_OPENVMS); -+	zend_string *const_OPSYS_OPENVMS_name = zend_string_init_interned("OPSYS_OPENVMS", sizeof("OPSYS_OPENVMS") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_OPENVMS_name, &const_OPSYS_OPENVMS_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_OPENVMS_name); -+ -+	zval const_OPSYS_UNIX_value; -+	ZVAL_LONG(&const_OPSYS_UNIX_value, ZIP_OPSYS_UNIX); -+	zend_string *const_OPSYS_UNIX_name = zend_string_init_interned("OPSYS_UNIX", sizeof("OPSYS_UNIX") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_UNIX_name, &const_OPSYS_UNIX_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_UNIX_name); -+ -+	zval const_OPSYS_VM_CMS_value; -+	ZVAL_LONG(&const_OPSYS_VM_CMS_value, ZIP_OPSYS_VM_CMS); -+	zend_string *const_OPSYS_VM_CMS_name = zend_string_init_interned("OPSYS_VM_CMS", sizeof("OPSYS_VM_CMS") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_VM_CMS_name, &const_OPSYS_VM_CMS_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_VM_CMS_name); -+ -+	zval const_OPSYS_ATARI_ST_value; -+	ZVAL_LONG(&const_OPSYS_ATARI_ST_value, ZIP_OPSYS_ATARI_ST); -+	zend_string *const_OPSYS_ATARI_ST_name = zend_string_init_interned("OPSYS_ATARI_ST", sizeof("OPSYS_ATARI_ST") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_ATARI_ST_name, &const_OPSYS_ATARI_ST_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_ATARI_ST_name); -+ -+	zval const_OPSYS_OS_2_value; -+	ZVAL_LONG(&const_OPSYS_OS_2_value, ZIP_OPSYS_OS_2); -+	zend_string *const_OPSYS_OS_2_name = zend_string_init_interned("OPSYS_OS_2", sizeof("OPSYS_OS_2") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_OS_2_name, &const_OPSYS_OS_2_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_OS_2_name); -+ -+	zval const_OPSYS_MACINTOSH_value; -+	ZVAL_LONG(&const_OPSYS_MACINTOSH_value, ZIP_OPSYS_MACINTOSH); -+	zend_string *const_OPSYS_MACINTOSH_name = zend_string_init_interned("OPSYS_MACINTOSH", sizeof("OPSYS_MACINTOSH") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_MACINTOSH_name, &const_OPSYS_MACINTOSH_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_MACINTOSH_name); -+ -+	zval const_OPSYS_Z_SYSTEM_value; -+	ZVAL_LONG(&const_OPSYS_Z_SYSTEM_value, ZIP_OPSYS_Z_SYSTEM); -+	zend_string *const_OPSYS_Z_SYSTEM_name = zend_string_init_interned("OPSYS_Z_SYSTEM", sizeof("OPSYS_Z_SYSTEM") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_Z_SYSTEM_name, &const_OPSYS_Z_SYSTEM_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_Z_SYSTEM_name); -+ -+	zval const_OPSYS_CPM_value; -+	ZVAL_LONG(&const_OPSYS_CPM_value, ZIP_OPSYS_CPM); -+	zend_string *const_OPSYS_CPM_name = zend_string_init_interned("OPSYS_CPM", sizeof("OPSYS_CPM") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_CPM_name, &const_OPSYS_CPM_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_CPM_name); -+ -+	zval const_OPSYS_WINDOWS_NTFS_value; -+	ZVAL_LONG(&const_OPSYS_WINDOWS_NTFS_value, ZIP_OPSYS_WINDOWS_NTFS); -+	zend_string *const_OPSYS_WINDOWS_NTFS_name = zend_string_init_interned("OPSYS_WINDOWS_NTFS", sizeof("OPSYS_WINDOWS_NTFS") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_WINDOWS_NTFS_name, &const_OPSYS_WINDOWS_NTFS_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_WINDOWS_NTFS_name); -+ -+	zval const_OPSYS_MVS_value; -+	ZVAL_LONG(&const_OPSYS_MVS_value, ZIP_OPSYS_MVS); -+	zend_string *const_OPSYS_MVS_name = zend_string_init_interned("OPSYS_MVS", sizeof("OPSYS_MVS") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_MVS_name, &const_OPSYS_MVS_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_MVS_name); -+ -+	zval const_OPSYS_VSE_value; -+	ZVAL_LONG(&const_OPSYS_VSE_value, ZIP_OPSYS_VSE); -+	zend_string *const_OPSYS_VSE_name = zend_string_init_interned("OPSYS_VSE", sizeof("OPSYS_VSE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_VSE_name, &const_OPSYS_VSE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_VSE_name); -+ -+	zval const_OPSYS_ACORN_RISC_value; -+	ZVAL_LONG(&const_OPSYS_ACORN_RISC_value, ZIP_OPSYS_ACORN_RISC); -+	zend_string *const_OPSYS_ACORN_RISC_name = zend_string_init_interned("OPSYS_ACORN_RISC", sizeof("OPSYS_ACORN_RISC") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_ACORN_RISC_name, &const_OPSYS_ACORN_RISC_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_ACORN_RISC_name); -+ -+	zval const_OPSYS_VFAT_value; -+	ZVAL_LONG(&const_OPSYS_VFAT_value, ZIP_OPSYS_VFAT); -+	zend_string *const_OPSYS_VFAT_name = zend_string_init_interned("OPSYS_VFAT", sizeof("OPSYS_VFAT") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_VFAT_name, &const_OPSYS_VFAT_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_VFAT_name); -+ -+	zval const_OPSYS_ALTERNATE_MVS_value; -+	ZVAL_LONG(&const_OPSYS_ALTERNATE_MVS_value, ZIP_OPSYS_ALTERNATE_MVS); -+	zend_string *const_OPSYS_ALTERNATE_MVS_name = zend_string_init_interned("OPSYS_ALTERNATE_MVS", sizeof("OPSYS_ALTERNATE_MVS") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_ALTERNATE_MVS_name, &const_OPSYS_ALTERNATE_MVS_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_ALTERNATE_MVS_name); -+ -+	zval const_OPSYS_BEOS_value; -+	ZVAL_LONG(&const_OPSYS_BEOS_value, ZIP_OPSYS_BEOS); -+	zend_string *const_OPSYS_BEOS_name = zend_string_init_interned("OPSYS_BEOS", sizeof("OPSYS_BEOS") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_BEOS_name, &const_OPSYS_BEOS_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_BEOS_name); -+ -+	zval const_OPSYS_TANDEM_value; -+	ZVAL_LONG(&const_OPSYS_TANDEM_value, ZIP_OPSYS_TANDEM); -+	zend_string *const_OPSYS_TANDEM_name = zend_string_init_interned("OPSYS_TANDEM", sizeof("OPSYS_TANDEM") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_TANDEM_name, &const_OPSYS_TANDEM_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_TANDEM_name); -+ -+	zval const_OPSYS_OS_400_value; -+	ZVAL_LONG(&const_OPSYS_OS_400_value, ZIP_OPSYS_OS_400); -+	zend_string *const_OPSYS_OS_400_name = zend_string_init_interned("OPSYS_OS_400", sizeof("OPSYS_OS_400") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_OS_400_name, &const_OPSYS_OS_400_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_OS_400_name); -+ -+	zval const_OPSYS_OS_X_value; -+	ZVAL_LONG(&const_OPSYS_OS_X_value, ZIP_OPSYS_OS_X); -+	zend_string *const_OPSYS_OS_X_name = zend_string_init_interned("OPSYS_OS_X", sizeof("OPSYS_OS_X") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_OS_X_name, &const_OPSYS_OS_X_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_OS_X_name); -+ -+	zval const_OPSYS_DEFAULT_value; -+	ZVAL_LONG(&const_OPSYS_DEFAULT_value, ZIP_OPSYS_DEFAULT); -+	zend_string *const_OPSYS_DEFAULT_name = zend_string_init_interned("OPSYS_DEFAULT", sizeof("OPSYS_DEFAULT") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_OPSYS_DEFAULT_name, &const_OPSYS_DEFAULT_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_OPSYS_DEFAULT_name); -+#endif -+ -+	zval const_EM_NONE_value; -+	ZVAL_LONG(&const_EM_NONE_value, ZIP_EM_NONE); -+	zend_string *const_EM_NONE_name = zend_string_init_interned("EM_NONE", sizeof("EM_NONE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_EM_NONE_name, &const_EM_NONE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_EM_NONE_name); -+ -+	zval const_EM_TRAD_PKWARE_value; -+	ZVAL_LONG(&const_EM_TRAD_PKWARE_value, ZIP_EM_TRAD_PKWARE); -+	zend_string *const_EM_TRAD_PKWARE_name = zend_string_init_interned("EM_TRAD_PKWARE", sizeof("EM_TRAD_PKWARE") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_EM_TRAD_PKWARE_name, &const_EM_TRAD_PKWARE_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_EM_TRAD_PKWARE_name); -+#if defined(HAVE_ENCRYPTION) -+ -+	zval const_EM_AES_128_value; -+	ZVAL_LONG(&const_EM_AES_128_value, ZIP_EM_AES_128); -+	zend_string *const_EM_AES_128_name = zend_string_init_interned("EM_AES_128", sizeof("EM_AES_128") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_EM_AES_128_name, &const_EM_AES_128_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_EM_AES_128_name); -+ -+	zval const_EM_AES_192_value; -+	ZVAL_LONG(&const_EM_AES_192_value, ZIP_EM_AES_192); -+	zend_string *const_EM_AES_192_name = zend_string_init_interned("EM_AES_192", sizeof("EM_AES_192") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_EM_AES_192_name, &const_EM_AES_192_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_EM_AES_192_name); -+ -+	zval const_EM_AES_256_value; -+	ZVAL_LONG(&const_EM_AES_256_value, ZIP_EM_AES_256); -+	zend_string *const_EM_AES_256_name = zend_string_init_interned("EM_AES_256", sizeof("EM_AES_256") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_EM_AES_256_name, &const_EM_AES_256_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_EM_AES_256_name); -+#endif -+ -+	zval const_EM_UNKNOWN_value; -+	ZVAL_LONG(&const_EM_UNKNOWN_value, ZIP_EM_UNKNOWN); -+	zend_string *const_EM_UNKNOWN_name = zend_string_init_interned("EM_UNKNOWN", sizeof("EM_UNKNOWN") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_EM_UNKNOWN_name, &const_EM_UNKNOWN_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_EM_UNKNOWN_name); -+ -+	zval const_LIBZIP_VERSION_value; -+	zend_string *const_LIBZIP_VERSION_value_str = zend_string_init(LIBZIP_VERSION_STR, strlen(LIBZIP_VERSION_STR), 1); -+	ZVAL_STR(&const_LIBZIP_VERSION_value, const_LIBZIP_VERSION_value_str); -+	zend_string *const_LIBZIP_VERSION_name = zend_string_init_interned("LIBZIP_VERSION", sizeof("LIBZIP_VERSION") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_LIBZIP_VERSION_name, &const_LIBZIP_VERSION_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); -+	zend_string_release(const_LIBZIP_VERSION_name); -+ -+	zval const_LENGTH_TO_END_value; -+	ZVAL_LONG(&const_LENGTH_TO_END_value, ZIP_LENGTH_TO_END); -+	zend_string *const_LENGTH_TO_END_name = zend_string_init_interned("LENGTH_TO_END", sizeof("LENGTH_TO_END") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_LENGTH_TO_END_name, &const_LENGTH_TO_END_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_LENGTH_TO_END_name); -+#if defined(ZIP_LENGTH_UNCHECKED) -+ -+	zval const_LENGTH_UNCHECKED_value; -+	ZVAL_LONG(&const_LENGTH_UNCHECKED_value, ZIP_LENGTH_UNCHECKED); -+	zend_string *const_LENGTH_UNCHECKED_name = zend_string_init_interned("LENGTH_UNCHECKED", sizeof("LENGTH_UNCHECKED") - 1, 1); -+	zend_declare_typed_class_constant(class_entry, const_LENGTH_UNCHECKED_name, &const_LENGTH_UNCHECKED_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(const_LENGTH_UNCHECKED_name); -+#endif -+ -+	zval property_lastId_default_value; -+	ZVAL_UNDEF(&property_lastId_default_value); -+	zend_string *property_lastId_name = zend_string_init("lastId", sizeof("lastId") - 1, 1); -+	zend_declare_typed_property(class_entry, property_lastId_name, &property_lastId_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(property_lastId_name); -+ -+	zval property_status_default_value; -+	ZVAL_UNDEF(&property_status_default_value); -+	zend_string *property_status_name = zend_string_init("status", sizeof("status") - 1, 1); -+	zend_declare_typed_property(class_entry, property_status_name, &property_status_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(property_status_name); -+ -+	zval property_statusSys_default_value; -+	ZVAL_UNDEF(&property_statusSys_default_value); -+	zend_string *property_statusSys_name = zend_string_init("statusSys", sizeof("statusSys") - 1, 1); -+	zend_declare_typed_property(class_entry, property_statusSys_name, &property_statusSys_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(property_statusSys_name); -+ -+	zval property_numFiles_default_value; -+	ZVAL_UNDEF(&property_numFiles_default_value); -+	zend_string *property_numFiles_name = zend_string_init("numFiles", sizeof("numFiles") - 1, 1); -+	zend_declare_typed_property(class_entry, property_numFiles_name, &property_numFiles_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG)); -+	zend_string_release(property_numFiles_name); -+ -+	zval property_filename_default_value; -+	ZVAL_UNDEF(&property_filename_default_value); -+	zend_string *property_filename_name = zend_string_init("filename", sizeof("filename") - 1, 1); -+	zend_declare_typed_property(class_entry, property_filename_name, &property_filename_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); -+	zend_string_release(property_filename_name); -+ -+	zval property_comment_default_value; -+	ZVAL_UNDEF(&property_comment_default_value); -+	zend_string *property_comment_name = zend_string_init("comment", sizeof("comment") - 1, 1); -+	zend_declare_typed_property(class_entry, property_comment_name, &property_comment_default_value, ZEND_ACC_PUBLIC, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING)); -+	zend_string_release(property_comment_name); -+ -+#if defined(ZIP_FL_RECOMPRESS) -+ -+	zend_attribute *attribute_Deprecated_const_FL_RECOMPRESS_0 = zend_add_class_constant_attribute(class_entry, const_FL_RECOMPRESS, ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 1); -+	zval attribute_Deprecated_const_FL_RECOMPRESS_0_arg0; -+	zend_string *attribute_Deprecated_const_FL_RECOMPRESS_0_arg0_str = zend_string_init("8.3", strlen("8.3"), 1); -+	ZVAL_STR(&attribute_Deprecated_const_FL_RECOMPRESS_0_arg0, attribute_Deprecated_const_FL_RECOMPRESS_0_arg0_str); -+	ZVAL_COPY_VALUE(&attribute_Deprecated_const_FL_RECOMPRESS_0->args[0].value, &attribute_Deprecated_const_FL_RECOMPRESS_0_arg0); -+	attribute_Deprecated_const_FL_RECOMPRESS_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); -+#endif -+ -+ -+	zend_add_parameter_attribute(zend_hash_str_find_ptr(&class_entry->function_table, "setpassword", sizeof("setpassword") - 1), 0, ZSTR_KNOWN(ZEND_STR_SENSITIVEPARAMETER), 0); -+#if defined(HAVE_ENCRYPTION) -+ -+	zend_add_parameter_attribute(zend_hash_str_find_ptr(&class_entry->function_table, "setencryptionname", sizeof("setencryptionname") - 1), 2, ZSTR_KNOWN(ZEND_STR_SENSITIVEPARAMETER), 0); -+ -+	zend_add_parameter_attribute(zend_hash_str_find_ptr(&class_entry->function_table, "setencryptionindex", sizeof("setencryptionindex") - 1), 2, ZSTR_KNOWN(ZEND_STR_SENSITIVEPARAMETER), 0); -+#endif -+ -+	return class_entry; -+} -diff --git a/php85/zip_stream.c b/php85/zip_stream.c -new file mode 100644 -index 0000000..a323243 ---- /dev/null -+++ b/php85/zip_stream.c -@@ -0,0 +1,390 @@ -+/* -+  +----------------------------------------------------------------------+ -+  | Copyright (c) The PHP Group                                          | -+  +----------------------------------------------------------------------+ -+  | This source file is subject to version 3.01 of the PHP license,      | -+  | that is bundled with this package in the file LICENSE, and is        | -+  | available through the world-wide-web at the following url:           | -+  | https://www.php.net/license/3_01.txt                                 | -+  | If you did not receive a copy of the PHP license and are unable to   | -+  | obtain it through the world-wide-web, please send a note to          | -+  | license@php.net so we can mail you a copy immediately.               | -+  +----------------------------------------------------------------------+ -+  | Author: Piere-Alain Joye <pierre@php.net>                            | -+  +----------------------------------------------------------------------+ -+*/ -+ -+#ifdef HAVE_CONFIG_H -+#   include "config.h" -+#endif -+#include "php.h" -+#ifdef HAVE_ZIP -+ -+#include "php_streams.h" -+#include "ext/standard/file.h" -+#include "ext/standard/php_string.h" -+#include "fopen_wrappers.h" -+#include "php_zip.h" -+ -+/* needed for ssize_t definition */ -+#include <sys/types.h> -+ -+struct php_zip_stream_data_t { -+	struct zip *za; -+	struct zip_file *zf; -+	size_t cursor; -+	php_stream *stream; -+}; -+ -+#define STREAM_DATA_FROM_STREAM() \ -+	struct php_zip_stream_data_t *self = (struct php_zip_stream_data_t *) stream->abstract; -+ -+ -+/* {{{ php_zip_ops_read */ -+static ssize_t php_zip_ops_read(php_stream *stream, char *buf, size_t count) -+{ -+	ssize_t n = 0; -+	STREAM_DATA_FROM_STREAM(); -+ -+	if (self->zf) { -+		n = zip_fread(self->zf, buf, count); -+		if (n < 0) { -+#if LIBZIP_VERSION_MAJOR < 1 -+			int ze, se; -+			zip_file_error_get(self->zf, &ze, &se); -+			stream->eof = 1; -+			php_error_docref(NULL, E_WARNING, "Zip stream error: %s", zip_file_strerror(self->zf)); -+#else -+			zip_error_t *err; -+			err = zip_file_get_error(self->zf); -+			stream->eof = 1; -+			php_error_docref(NULL, E_WARNING, "Zip stream error: %s", zip_error_strerror(err)); -+			zip_error_fini(err); -+#endif -+			return -1; -+		} -+		/* cast count to signed value to avoid possibly negative n -+		 * being cast to unsigned value */ -+		if (n == 0 || n < (ssize_t)count) { -+			stream->eof = 1; -+		} else { -+			self->cursor += n; -+		} -+	} -+	return n; -+} -+/* }}} */ -+ -+/* {{{ php_zip_ops_write */ -+static ssize_t php_zip_ops_write(php_stream *stream, const char *buf, size_t count) -+{ -+	if (!stream) { -+		return -1; -+	} -+ -+	return count; -+} -+/* }}} */ -+ -+/* {{{ php_zip_ops_close */ -+static int php_zip_ops_close(php_stream *stream, int close_handle) -+{ -+	STREAM_DATA_FROM_STREAM(); -+	if (close_handle) { -+		if (self->zf) { -+			zip_fclose(self->zf); -+			self->zf = NULL; -+		} -+ -+		if (self->za) { -+			zip_close(self->za); -+			self->za = NULL; -+		} -+	} -+	efree(self); -+	stream->abstract = NULL; -+	return EOF; -+} -+/* }}} */ -+ -+/* {{{ php_zip_ops_flush */ -+static int php_zip_ops_flush(php_stream *stream) -+{ -+	if (!stream) { -+		return 0; -+	} -+ -+	return 0; -+} -+/* }}} */ -+ -+static int php_zip_ops_stat(php_stream *stream, php_stream_statbuf *ssb) /* {{{ */ -+{ -+	struct zip_stat sb; -+	const char *path = stream->orig_path; -+	size_t path_len = strlen(stream->orig_path); -+	char file_dirname[MAXPATHLEN]; -+	struct zip *za; -+	char *fragment; -+	size_t fragment_len; -+	int err; -+	zend_string *file_basename; -+ -+	fragment = strchr(path, '#'); -+	if (!fragment) { -+		return -1; -+	} -+ -+ -+	if (strncasecmp("zip://", path, 6) == 0) { -+		path += 6; -+	} -+ -+	fragment_len = strlen(fragment); -+ -+	if (fragment_len < 1) { -+		return -1; -+	} -+	path_len = strlen(path); -+	if (path_len >= MAXPATHLEN) { -+		return -1; -+	} -+ -+	memcpy(file_dirname, path, path_len - fragment_len); -+	file_dirname[path_len - fragment_len] = '\0'; -+ -+	file_basename = php_basename((char *)path, path_len - fragment_len, NULL, 0); -+	fragment++; -+ -+	if (ZIP_OPENBASEDIR_CHECKPATH(file_dirname)) { -+		zend_string_release_ex(file_basename, 0); -+		return -1; -+	} -+ -+	za = zip_open(file_dirname, ZIP_CREATE, &err); -+	if (za) { -+		memset(ssb, 0, sizeof(php_stream_statbuf)); -+		if (zip_stat(za, fragment, ZIP_FL_NOCASE, &sb) != 0) { -+			zip_close(za); -+			zend_string_release_ex(file_basename, 0); -+			return -1; -+		} -+		zip_close(za); -+ -+		if (path[path_len-1] != '/') { -+			ssb->sb.st_size = sb.size; -+			ssb->sb.st_mode |= S_IFREG; /* regular file */ -+		} else { -+			ssb->sb.st_size = 0; -+			ssb->sb.st_mode |= S_IFDIR; /* regular directory */ -+		} -+ -+		ssb->sb.st_mtime = sb.mtime; -+		ssb->sb.st_atime = sb.mtime; -+		ssb->sb.st_ctime = sb.mtime; -+		ssb->sb.st_nlink = 1; -+		ssb->sb.st_rdev = -1; -+#ifndef PHP_WIN32 -+		ssb->sb.st_blksize = -1; -+		ssb->sb.st_blocks = -1; -+#endif -+		ssb->sb.st_ino = -1; -+	} -+	zend_string_release_ex(file_basename, 0); -+	return 0; -+} -+/* }}} */ -+ -+#if LIBZIP_ATLEAST(1,9,1) -+/* {{{ php_zip_ops_seek */ -+static int php_zip_ops_seek(php_stream *stream, zend_off_t offset, int whence, zend_off_t *newoffset) -+{ -+	int ret = -1; -+	STREAM_DATA_FROM_STREAM(); -+ -+	if (self->zf) { -+		ret = zip_fseek(self->zf, offset, whence); -+		*newoffset = zip_ftell(self->zf); -+	} -+ -+	return ret; -+} -+/* }}} */ -+ -+/* with seek command */ -+const php_stream_ops php_stream_zipio_seek_ops = { -+	php_zip_ops_write, php_zip_ops_read, -+	php_zip_ops_close, php_zip_ops_flush, -+	"zip", -+	php_zip_ops_seek, /* seek */ -+	NULL, /* cast */ -+	php_zip_ops_stat, /* stat */ -+	NULL  /* set_option */ -+}; -+#endif -+ -+/* without seek command */ -+const php_stream_ops php_stream_zipio_ops = { -+	php_zip_ops_write, php_zip_ops_read, -+	php_zip_ops_close, php_zip_ops_flush, -+	"zip", -+	NULL, /* seek */ -+	NULL, /* cast */ -+	php_zip_ops_stat, /* stat */ -+	NULL  /* set_option */ -+}; -+ -+/* {{{ php_stream_zip_open */ -+php_stream *php_stream_zip_open(struct zip *arch, struct zip_stat *sb, const char *mode, zip_flags_t flags STREAMS_DC) -+{ -+	struct zip_file *zf = NULL; -+ -+	php_stream *stream = NULL; -+	struct php_zip_stream_data_t *self; -+ -+	if (strncmp(mode,"r", strlen("r")) != 0) { -+		return NULL; -+	} -+ -+	if (arch) { -+		zf = zip_fopen_index(arch, sb->index, flags); -+		if (zf) { -+			self = emalloc(sizeof(*self)); -+ -+			self->za = NULL; /* to keep it open on stream close */ -+			self->zf = zf; -+			self->stream = NULL; -+			self->cursor = 0; -+#if LIBZIP_ATLEAST(1,9,1) -+			if (zip_file_is_seekable(zf) > 0) { -+				stream = php_stream_alloc(&php_stream_zipio_seek_ops, self, NULL, mode); -+			} else -+#endif -+			{ -+				stream = php_stream_alloc(&php_stream_zipio_ops, self, NULL, mode); -+			} -+			stream->orig_path = estrdup(sb->name); -+		} -+	} -+ -+	return stream; -+} -+/* }}} */ -+ -+/* {{{ php_stream_zip_opener */ -+php_stream *php_stream_zip_opener(php_stream_wrapper *wrapper, -+											const char *path, -+											const char *mode, -+											int options, -+											zend_string **opened_path, -+											php_stream_context *context STREAMS_DC) -+{ -+	size_t path_len; -+ -+	zend_string *file_basename; -+	char file_dirname[MAXPATHLEN]; -+ -+	struct zip *za; -+	struct zip_file *zf = NULL; -+	char *fragment; -+	size_t fragment_len; -+	int err; -+ -+	php_stream *stream = NULL; -+	struct php_zip_stream_data_t *self; -+ -+	fragment = strchr(path, '#'); -+	if (!fragment) { -+		return NULL; -+	} -+ -+	if (strncasecmp("zip://", path, 6) == 0) { -+		path += 6; -+	} -+ -+	fragment_len = strlen(fragment); -+ -+	if (fragment_len < 1) { -+		return NULL; -+	} -+	path_len = strlen(path); -+	if (path_len >= MAXPATHLEN || mode[0] != 'r') { -+		return NULL; -+	} -+ -+	memcpy(file_dirname, path, path_len - fragment_len); -+	file_dirname[path_len - fragment_len] = '\0'; -+ -+	file_basename = php_basename(path, path_len - fragment_len, NULL, 0); -+	fragment++; -+ -+	if (ZIP_OPENBASEDIR_CHECKPATH(file_dirname)) { -+		zend_string_release_ex(file_basename, 0); -+		return NULL; -+	} -+ -+	za = zip_open(file_dirname, ZIP_CREATE, &err); -+	if (za) { -+		zval *tmpzval; -+ -+		if (context && NULL != (tmpzval = php_stream_context_get_option(context, "zip", "password"))) { -+			if (Z_TYPE_P(tmpzval) != IS_STRING || zip_set_default_password(za, Z_STRVAL_P(tmpzval))) { -+				php_error_docref(NULL, E_WARNING, "Can't set zip password"); -+			} -+		} -+ -+		zf = zip_fopen(za, fragment, 0); -+		if (zf) { -+			self = emalloc(sizeof(*self)); -+ -+			self->za = za; -+			self->zf = zf; -+			self->stream = NULL; -+			self->cursor = 0; -+#if LIBZIP_ATLEAST(1,9,1) -+			if (zip_file_is_seekable(zf) > 0) { -+				stream = php_stream_alloc(&php_stream_zipio_seek_ops, self, NULL, mode); -+			} else -+#endif -+			{ -+				stream = php_stream_alloc(&php_stream_zipio_ops, self, NULL, mode); -+			} -+ -+			if (opened_path) { -+				*opened_path = zend_string_init(path, strlen(path), 0); -+			} -+		} else { -+			zip_close(za); -+		} -+	} -+ -+	zend_string_release_ex(file_basename, 0); -+ -+	if (!stream) { -+		return NULL; -+	} else { -+		return stream; -+	} -+} -+/* }}} */ -+ -+static const php_stream_wrapper_ops zip_stream_wops = { -+	php_stream_zip_opener, -+	NULL,	/* close */ -+	NULL,	/* fstat */ -+	NULL,	/* stat */ -+	NULL,	/* opendir */ -+	"zip wrapper", -+	NULL,	/* unlink */ -+	NULL,	/* rename */ -+	NULL,	/* mkdir */ -+	NULL,	/* rmdir */ -+	NULL	/* metadata */ -+}; -+ -+const php_stream_wrapper php_stream_zip_wrapper = { -+	&zip_stream_wops, -+	NULL, -+	0 /* is_url */ -+}; -+#endif /* HAVE_ZIP */ ---  -2.50.0 - diff --git a/0001-Fix-leak-when-path-is-too-long-in-ZipArchive-extract.patch b/0001-Fix-leak-when-path-is-too-long-in-ZipArchive-extract.patch deleted file mode 100644 index 0dd8ea1..0000000 --- a/0001-Fix-leak-when-path-is-too-long-in-ZipArchive-extract.patch +++ /dev/null @@ -1,103 +0,0 @@ -From c55973ad182906be1282257f1ba79b89ab9625a2 Mon Sep 17 00:00:00 2001 -From: Remi Collet <remi@remirepo.net> -Date: Wed, 27 Aug 2025 09:54:34 +0200 -Subject: [PATCH 1/2] Fix leak when path is too long in ZipArchive::extractTo() - -Upstream 09c223de00af9b312e49db7bbc915aefaca5dbf8 ---- - php5/php_zip.c  | 1 + - php7/php_zip.c  | 1 + - php73/php_zip.c | 1 + - php74/php_zip.c | 1 + - php8/php_zip.c  | 1 + - php81/php_zip.c | 1 + - php85/php_zip.c | 1 + - 7 files changed, 7 insertions(+) - -diff --git a/php5/php_zip.c b/php5/php_zip.c -index 08b4963..5dda462 100644 ---- a/php5/php_zip.c -+++ b/php5/php_zip.c -@@ -234,6 +234,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, const char *file, i - 		return 0; - 	} else if (len > MAXPATHLEN) { - 		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Full extraction path exceed MAXPATHLEN (%i)", MAXPATHLEN); -+		efree(fullpath); - 		efree(file_dirname_fullpath); - 		efree(file_basename); - 		efree(new_state.cwd); -diff --git a/php7/php_zip.c b/php7/php_zip.c -index b660b33..bffed61 100644 ---- a/php7/php_zip.c -+++ b/php7/php_zip.c -@@ -233,6 +233,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, const char *file, s - 		return 0; - 	} else if (len > MAXPATHLEN) { - 		php_error_docref(NULL, E_WARNING, "Full extraction path exceed MAXPATHLEN (%i)", MAXPATHLEN); -+		efree(fullpath); - 		efree(file_dirname_fullpath); - 		zend_string_release(file_basename); - 		CWD_STATE_FREE(new_state.cwd); -diff --git a/php73/php_zip.c b/php73/php_zip.c -index 9dd4ac2..0635a84 100644 ---- a/php73/php_zip.c -+++ b/php73/php_zip.c -@@ -233,6 +233,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, const char *file, s - 		return 0; - 	} else if (len > MAXPATHLEN) { - 		php_error_docref(NULL, E_WARNING, "Full extraction path exceed MAXPATHLEN (%i)", MAXPATHLEN); -+		efree(fullpath); - 		efree(file_dirname_fullpath); - 		zend_string_release_ex(file_basename, 0); - 		CWD_STATE_FREE(new_state.cwd); -diff --git a/php74/php_zip.c b/php74/php_zip.c -index 5754dd9..0cd33ad 100644 ---- a/php74/php_zip.c -+++ b/php74/php_zip.c -@@ -229,6 +229,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, const char *file, s - 		return 0; - 	} else if (len > MAXPATHLEN) { - 		php_error_docref(NULL, E_WARNING, "Full extraction path exceed MAXPATHLEN (%i)", MAXPATHLEN); -+		efree(fullpath); - 		efree(file_dirname_fullpath); - 		zend_string_release_ex(file_basename, 0); - 		CWD_STATE_FREE(new_state.cwd); -diff --git a/php8/php_zip.c b/php8/php_zip.c -index dc5f539..5328c25 100644 ---- a/php8/php_zip.c -+++ b/php8/php_zip.c -@@ -217,6 +217,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, const char *file, s - 		return 0; - 	} else if (len > MAXPATHLEN) { - 		php_error_docref(NULL, E_WARNING, "Full extraction path exceed MAXPATHLEN (%i)", MAXPATHLEN); -+		efree(fullpath); - 		efree(file_dirname_fullpath); - 		zend_string_release_ex(file_basename, 0); - 		CWD_STATE_FREE(new_state.cwd); -diff --git a/php81/php_zip.c b/php81/php_zip.c -index 3746ff5..ddcf47f 100644 ---- a/php81/php_zip.c -+++ b/php81/php_zip.c -@@ -226,6 +226,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, const char *file, s - 		return 0; - 	} else if (len > MAXPATHLEN) { - 		php_error_docref(NULL, E_WARNING, "Full extraction path exceed MAXPATHLEN (%i)", MAXPATHLEN); -+		efree(fullpath); - 		efree(file_dirname_fullpath); - 		zend_string_release_ex(file_basename, 0); - 		CWD_STATE_FREE(new_state.cwd); -diff --git a/php85/php_zip.c b/php85/php_zip.c -index 450c297..d5f7b01 100644 ---- a/php85/php_zip.c -+++ b/php85/php_zip.c -@@ -211,6 +211,7 @@ static int php_zip_extract_file(struct zip * za, char *dest, const char *file, s - 		return 0; - 	} else if (len > MAXPATHLEN) { - 		php_error_docref(NULL, E_WARNING, "Full extraction path exceed MAXPATHLEN (%i)", MAXPATHLEN); -+		efree(fullpath); - 		efree(file_dirname_fullpath); - 		zend_string_release_ex(file_basename, 0); - 		CWD_STATE_FREE(new_state.cwd); ---  -2.51.0 - diff --git a/0001-Fix-memory-leak-in-zip-when-encountering-empty-glob-.patch b/0001-Fix-memory-leak-in-zip-when-encountering-empty-glob-.patch deleted file mode 100644 index 1950f49..0000000 --- a/0001-Fix-memory-leak-in-zip-when-encountering-empty-glob-.patch +++ /dev/null @@ -1,160 +0,0 @@ -From 93046609eae6d4c9d57761863cc2bc590a6355e7 Mon Sep 17 00:00:00 2001 -From: Remi Collet <remi@remirepo.net> -Date: Thu, 18 Sep 2025 11:08:36 +0200 -Subject: [PATCH 1/4] Fix memory leak in zip when encountering empty glob - result - -From https://github.com/php/php-src/commit/216e87ad7e33fda75f33e31c36a30b04b90e4696 ---- - php5/php_zip.c  | 2 -- - php7/php_zip.c  | 2 -- - php73/php_zip.c | 2 -- - php74/php_zip.c | 2 -- - php8/php_zip.c  | 2 -- - php81/php_zip.c | 2 -- - php85/php_zip.c | 2 -- - 7 files changed, 14 deletions(-) - -diff --git a/php5/php_zip.c b/php5/php_zip.c -index 5dda462..8d16d3b 100644 ---- a/php5/php_zip.c -+++ b/php5/php_zip.c -@@ -706,7 +706,6 @@ int php_zip_glob(char *pattern, int pattern_len, long flags, zval *return_value - 			   can be used for simple glob() calls without further error - 			   checking. - 			*/ --			array_init(return_value); - 			return 0; - 		} - #endif -@@ -715,7 +714,6 @@ int php_zip_glob(char *pattern, int pattern_len, long flags, zval *return_value -  - 	/* now catch the FreeBSD style of "no matches" */ - 	if (!globbuf.gl_pathc || !globbuf.gl_pathv) { --		array_init(return_value); - 		return 0; - 	} -  -diff --git a/php7/php_zip.c b/php7/php_zip.c -index bffed61..d962618 100644 ---- a/php7/php_zip.c -+++ b/php7/php_zip.c -@@ -668,7 +668,6 @@ int php_zip_glob(char *pattern, int pattern_len, zend_long flags, zval *return_v - 			   can be used for simple glob() calls without further error - 			   checking. - 			*/ --			array_init(return_value); - 			return 0; - 		} - #endif -@@ -677,7 +676,6 @@ int php_zip_glob(char *pattern, int pattern_len, zend_long flags, zval *return_v -  - 	/* now catch the FreeBSD style of "no matches" */ - 	if (!globbuf.gl_pathc || !globbuf.gl_pathv) { --		array_init(return_value); - 		return 0; - 	} -  -diff --git a/php73/php_zip.c b/php73/php_zip.c -index 0635a84..eb2c5b6 100644 ---- a/php73/php_zip.c -+++ b/php73/php_zip.c -@@ -668,7 +668,6 @@ int php_zip_glob(char *pattern, int pattern_len, zend_long flags, zval *return_v - 			   can be used for simple glob() calls without further error - 			   checking. - 			*/ --			array_init(return_value); - 			return 0; - 		} - #endif -@@ -677,7 +676,6 @@ int php_zip_glob(char *pattern, int pattern_len, zend_long flags, zval *return_v -  - 	/* now catch the FreeBSD style of "no matches" */ - 	if (!globbuf.gl_pathc || !globbuf.gl_pathv) { --		array_init(return_value); - 		return 0; - 	} -  -diff --git a/php74/php_zip.c b/php74/php_zip.c -index 0cd33ad..f987056 100644 ---- a/php74/php_zip.c -+++ b/php74/php_zip.c -@@ -664,7 +664,6 @@ int php_zip_glob(char *pattern, int pattern_len, zend_long flags, zval *return_v - 			   can be used for simple glob() calls without further error - 			   checking. - 			*/ --			array_init(return_value); - 			return 0; - 		} - #endif -@@ -673,7 +672,6 @@ int php_zip_glob(char *pattern, int pattern_len, zend_long flags, zval *return_v -  - 	/* now catch the FreeBSD style of "no matches" */ - 	if (!globbuf.gl_pathc || !globbuf.gl_pathv) { --		array_init(return_value); - 		return 0; - 	} -  -diff --git a/php8/php_zip.c b/php8/php_zip.c -index 5328c25..8129c15 100644 ---- a/php8/php_zip.c -+++ b/php8/php_zip.c -@@ -674,7 +674,6 @@ int php_zip_glob(char *pattern, int pattern_len, zend_long flags, zval *return_v - 			   can be used for simple glob() calls without further error - 			   checking. - 			*/ --			array_init(return_value); - 			return 0; - 		} - #endif -@@ -683,7 +682,6 @@ int php_zip_glob(char *pattern, int pattern_len, zend_long flags, zval *return_v -  - 	/* now catch the FreeBSD style of "no matches" */ - 	if (!globbuf.gl_pathc || !globbuf.gl_pathv) { --		array_init(return_value); - 		return 0; - 	} -  -diff --git a/php81/php_zip.c b/php81/php_zip.c -index ddcf47f..8bc582d 100644 ---- a/php81/php_zip.c -+++ b/php81/php_zip.c -@@ -676,7 +676,6 @@ int php_zip_glob(char *pattern, int pattern_len, zend_long flags, zval *return_v - 			   can be used for simple glob() calls without further error - 			   checking. - 			*/ --			array_init(return_value); - 			return 0; - 		} - #endif -@@ -685,7 +684,6 @@ int php_zip_glob(char *pattern, int pattern_len, zend_long flags, zval *return_v -  - 	/* now catch the FreeBSD style of "no matches" */ - 	if (!globbuf.gl_pathc || !globbuf.gl_pathv) { --		array_init(return_value); - 		return 0; - 	} -  -diff --git a/php85/php_zip.c b/php85/php_zip.c -index d5f7b01..604b403 100644 ---- a/php85/php_zip.c -+++ b/php85/php_zip.c -@@ -628,7 +628,6 @@ int php_zip_glob(char *pattern, int pattern_len, zend_long flags, zval *return_v - 			   can be used for simple glob() calls without further error - 			   checking. - 			*/ --			array_init(return_value); - 			return 0; - 		} - #endif -@@ -637,7 +636,6 @@ int php_zip_glob(char *pattern, int pattern_len, zend_long flags, zval *return_v -  - 	/* now catch the FreeBSD style of "no matches" */ - 	if (!globbuf.gl_pathc || !globbuf.gl_pathv) { --		array_init(return_value); - 		return 0; - 	} -  ---  -2.51.0 - diff --git a/0001-fix-test-for-8.5.0beta2.patch b/0001-fix-test-for-8.5.0beta2.patch deleted file mode 100644 index e51be1f..0000000 --- a/0001-fix-test-for-8.5.0beta2.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 33d98e7efc25cf79f9969a93131e1b5ff976eb31 Mon Sep 17 00:00:00 2001 -From: Remi Collet <remi@remirepo.net> -Date: Wed, 27 Aug 2025 09:50:06 +0200 -Subject: [PATCH] fix test for 8.5.0beta2 - ---- - tests/bug53603.phpt | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tests/bug53603.phpt b/tests/bug53603.phpt -index 76b8ad9..dcbbeba 100644 ---- a/tests/bug53603.phpt -+++ b/tests/bug53603.phpt -@@ -31,6 +31,6 @@ var_dump($a); -  - --EXPECTF-- -  --Warning: ZipArchive::extractTo(teststream://test/foo): %sailed to open stream: "TestStream::stream_open" call failed in %s on line %d -+Warning: ZipArchive::extractTo(teststream://test/foo): %sailed to open stream: "TestStream::stream_open" %s on line %d - bool(false) -  ---  -2.51.0 - diff --git a/0002-Fix-GH-19688-Remove-pattern-overflow-in-zip-addGlob.patch b/0002-Fix-GH-19688-Remove-pattern-overflow-in-zip-addGlob.patch deleted file mode 100644 index cdff431..0000000 --- a/0002-Fix-GH-19688-Remove-pattern-overflow-in-zip-addGlob.patch +++ /dev/null @@ -1,142 +0,0 @@ -From fa331a32d499b895aa836040b88f70697bf4ba9c Mon Sep 17 00:00:00 2001 -From: Remi Collet <remi@remirepo.net> -Date: Thu, 18 Sep 2025 11:17:58 +0200 -Subject: [PATCH 2/4] Fix GH-19688: Remove pattern overflow in zip addGlob() - -From https://github.com/php/php-src/commit/901f71e6e3a9c97928a8c32ab7e70bd52e93819c#diff-7ee66c4f1536ac84dc5bbff1b8312e2eef24b974b3e48a5c5c2bcfdf2eb8f3ce ---- - package.xml        |  2 ++ - php5/php_zip.c     |  2 +- - php7/php_zip.c     |  2 +- - php73/php_zip.c    |  2 +- - php74/php_zip.c    |  2 +- - php8/php_zip.c     |  2 +- - php81/php_zip.c    |  2 +- - php85/php_zip.c    |  2 +- - tests/gh19688.phpt | 23 +++++++++++++++++++++++ - 9 files changed, 32 insertions(+), 7 deletions(-) - create mode 100644 tests/gh19688.phpt - -diff --git a/php5/php_zip.c b/php5/php_zip.c -index 8d16d3b..8773944 100644 ---- a/php5/php_zip.c -+++ b/php5/php_zip.c -@@ -1968,7 +1968,7 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* - 					php_basename(Z_STRVAL_PP(zval_file), Z_STRLEN_PP(zval_file), NULL, 0, - 									&basename, (size_t *)&file_stripped_len TSRMLS_CC); - 					file_stripped = basename; --				} else if (opts.remove_path && !memcmp(Z_STRVAL_PP(zval_file), opts.remove_path, opts.remove_path_len)) { -+				} else if (opts.remove_path && Z_STRLEN_PP(zval_file) > opts.remove_path_len &&  !memcmp(Z_STRVAL_PP(zval_file), opts.remove_path, opts.remove_path_len)) { - 					if (IS_SLASH(Z_STRVAL_PP(zval_file)[opts.remove_path_len])) { - 						file_stripped = Z_STRVAL_PP(zval_file) + opts.remove_path_len + 1; - 						file_stripped_len = Z_STRLEN_PP(zval_file) - opts.remove_path_len - 1; -diff --git a/php7/php_zip.c b/php7/php_zip.c -index d962618..6363728 100644 ---- a/php7/php_zip.c -+++ b/php7/php_zip.c -@@ -1896,7 +1896,7 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* - 					basename = php_basename(Z_STRVAL_P(zval_file), Z_STRLEN_P(zval_file), NULL, 0); - 					file_stripped = ZSTR_VAL(basename); - 					file_stripped_len = ZSTR_LEN(basename); --				} else if (opts.remove_path && !memcmp(Z_STRVAL_P(zval_file), opts.remove_path, opts.remove_path_len)) { -+				} else if (opts.remove_path && Z_STRLEN_P(zval_file) > opts.remove_path_len && !memcmp(Z_STRVAL_P(zval_file), opts.remove_path, opts.remove_path_len)) { - 					if (IS_SLASH(Z_STRVAL_P(zval_file)[opts.remove_path_len])) { - 						file_stripped = Z_STRVAL_P(zval_file) + opts.remove_path_len + 1; - 						file_stripped_len = Z_STRLEN_P(zval_file) - opts.remove_path_len - 1; -diff --git a/php73/php_zip.c b/php73/php_zip.c -index eb2c5b6..63715e7 100644 ---- a/php73/php_zip.c -+++ b/php73/php_zip.c -@@ -1899,7 +1899,7 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* - 					basename = php_basename(Z_STRVAL_P(zval_file), Z_STRLEN_P(zval_file), NULL, 0); - 					file_stripped = ZSTR_VAL(basename); - 					file_stripped_len = ZSTR_LEN(basename); --				} else if (opts.remove_path && !memcmp(Z_STRVAL_P(zval_file), opts.remove_path, opts.remove_path_len)) { -+				} else if (opts.remove_path && Z_STRLEN_P(zval_file) > opts.remove_path_len && !memcmp(Z_STRVAL_P(zval_file), opts.remove_path, opts.remove_path_len)) { - 					if (IS_SLASH(Z_STRVAL_P(zval_file)[opts.remove_path_len])) { - 						file_stripped = Z_STRVAL_P(zval_file) + opts.remove_path_len + 1; - 						file_stripped_len = Z_STRLEN_P(zval_file) - opts.remove_path_len - 1; -diff --git a/php74/php_zip.c b/php74/php_zip.c -index f987056..17f5476 100644 ---- a/php74/php_zip.c -+++ b/php74/php_zip.c -@@ -1884,7 +1884,7 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* - 					basename = php_basename(Z_STRVAL_P(zval_file), Z_STRLEN_P(zval_file), NULL, 0); - 					file_stripped = ZSTR_VAL(basename); - 					file_stripped_len = ZSTR_LEN(basename); --				} else if (opts.remove_path && !memcmp(Z_STRVAL_P(zval_file), opts.remove_path, opts.remove_path_len)) { -+				} else if (opts.remove_path && Z_STRLEN_P(zval_file) > opts.remove_path_len && !memcmp(Z_STRVAL_P(zval_file), opts.remove_path, opts.remove_path_len)) { - 					if (IS_SLASH(Z_STRVAL_P(zval_file)[opts.remove_path_len])) { - 						file_stripped = Z_STRVAL_P(zval_file) + opts.remove_path_len + 1; - 						file_stripped_len = Z_STRLEN_P(zval_file) - opts.remove_path_len - 1; -diff --git a/php8/php_zip.c b/php8/php_zip.c -index 8129c15..d3516f8 100644 ---- a/php8/php_zip.c -+++ b/php8/php_zip.c -@@ -1786,7 +1786,7 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* - 					basename = php_basename(Z_STRVAL_P(zval_file), Z_STRLEN_P(zval_file), NULL, 0); - 					file_stripped = ZSTR_VAL(basename); - 					file_stripped_len = ZSTR_LEN(basename); --				} else if (opts.remove_path && !memcmp(Z_STRVAL_P(zval_file), opts.remove_path, opts.remove_path_len)) { -+				} else if (opts.remove_path && Z_STRLEN_P(zval_file) > opts.remove_path_len && !memcmp(Z_STRVAL_P(zval_file), opts.remove_path, opts.remove_path_len)) { - 					if (IS_SLASH(Z_STRVAL_P(zval_file)[opts.remove_path_len])) { - 						file_stripped = Z_STRVAL_P(zval_file) + opts.remove_path_len + 1; - 						file_stripped_len = Z_STRLEN_P(zval_file) - opts.remove_path_len - 1; -diff --git a/php81/php_zip.c b/php81/php_zip.c -index 8bc582d..7316643 100644 ---- a/php81/php_zip.c -+++ b/php81/php_zip.c -@@ -1806,7 +1806,7 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* - 					basename = php_basename(Z_STRVAL_P(zval_file), Z_STRLEN_P(zval_file), NULL, 0); - 					file_stripped = ZSTR_VAL(basename); - 					file_stripped_len = ZSTR_LEN(basename); --				} else if (opts.remove_path && !memcmp(Z_STRVAL_P(zval_file), opts.remove_path, opts.remove_path_len)) { -+				} else if (opts.remove_path && Z_STRLEN_P(zval_file) > opts.remove_path_len && !memcmp(Z_STRVAL_P(zval_file), opts.remove_path, opts.remove_path_len)) { - 					if (IS_SLASH(Z_STRVAL_P(zval_file)[opts.remove_path_len])) { - 						file_stripped = Z_STRVAL_P(zval_file) + opts.remove_path_len + 1; - 						file_stripped_len = Z_STRLEN_P(zval_file) - opts.remove_path_len - 1; -diff --git a/php85/php_zip.c b/php85/php_zip.c -index 604b403..4fcb66f 100644 ---- a/php85/php_zip.c -+++ b/php85/php_zip.c -@@ -1742,7 +1742,7 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* - 					basename = php_basename(Z_STRVAL_P(zval_file), Z_STRLEN_P(zval_file), NULL, 0); - 					file_stripped = ZSTR_VAL(basename); - 					file_stripped_len = ZSTR_LEN(basename); --				} else if (opts.remove_path && !memcmp(Z_STRVAL_P(zval_file), opts.remove_path, opts.remove_path_len)) { -+				} else if (opts.remove_path && Z_STRLEN_P(zval_file) > opts.remove_path_len && !memcmp(Z_STRVAL_P(zval_file), opts.remove_path, opts.remove_path_len)) { - 					if (IS_SLASH(Z_STRVAL_P(zval_file)[opts.remove_path_len])) { - 						file_stripped = Z_STRVAL_P(zval_file) + opts.remove_path_len + 1; - 						file_stripped_len = Z_STRLEN_P(zval_file) - opts.remove_path_len - 1; -diff --git a/tests/gh19688.phpt b/tests/gh19688.phpt -new file mode 100644 -index 0000000..09513a9 ---- /dev/null -+++ b/tests/gh19688.phpt -@@ -0,0 +1,23 @@ -+--TEST-- -+GH-19688 (Remove pattern overflow in zip addGlob()) -+--SKIPIF-- -+<?php -+if (!extension_loaded('zip')) die('skip'); -+?> -+--FILE-- -+<?php -+$dir = __DIR__ . '/'; -+$testfile = $dir . '001.phpt'; -+$zip = new ZipArchive(); -+$filename = $dir . '/gh19688.zip'; -+$zip->open($filename, ZipArchive::CREATE | ZipArchive::OVERWRITE); -+$options = array('remove_path' => $dir . 'a very long string here that will overrun'); -+$zip->addGlob($testfile, 0, $options); -+var_dump($zip->getNameIndex(0)); -+?> -+--CLEAN-- -+<?php -+@unlink(__DIR__  . '/gh19688.zip'); -+?> -+--EXPECTF-- -+string(%d) "%s001.phpt" ---  -2.51.0 - diff --git a/0003-regen-arginfo.patch b/0003-regen-arginfo.patch deleted file mode 100644 index 7325387..0000000 --- a/0003-regen-arginfo.patch +++ /dev/null @@ -1,160 +0,0 @@ -From 7b680397959dc27f08606056de489a4028784505 Mon Sep 17 00:00:00 2001 -From: Remi Collet <remi@remirepo.net> -Date: Thu, 18 Sep 2025 11:21:24 +0200 -Subject: [PATCH 3/4] regen arginfo - ---- - php85/php_zip_arginfo.h | 91 +++++++++-------------------------------- - 1 file changed, 19 insertions(+), 72 deletions(-) - -diff --git a/php85/php_zip_arginfo.h b/php85/php_zip_arginfo.h -index c8dab41..2a24750 100644 ---- a/php85/php_zip_arginfo.h -+++ b/php85/php_zip_arginfo.h -@@ -465,113 +465,63 @@ static void register_php_zip_symbols(int module_number) - { -  - 	zend_attribute *attribute_Deprecated_func_zip_open_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_open", sizeof("zip_open") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); --	zval attribute_Deprecated_func_zip_open_0_arg0; --	zend_string *attribute_Deprecated_func_zip_open_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_open_0_arg0, attribute_Deprecated_func_zip_open_0_arg0_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_open_0->args[0].value, &attribute_Deprecated_func_zip_open_0_arg0); -+	ZVAL_STR(&attribute_Deprecated_func_zip_open_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_0)); - 	attribute_Deprecated_func_zip_open_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); --	zval attribute_Deprecated_func_zip_open_0_arg1; - 	zend_string *attribute_Deprecated_func_zip_open_0_arg1_str = zend_string_init("use ZipArchive::open() instead", strlen("use ZipArchive::open() instead"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_open_0_arg1, attribute_Deprecated_func_zip_open_0_arg1_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_open_0->args[1].value, &attribute_Deprecated_func_zip_open_0_arg1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_open_0->args[1].value, attribute_Deprecated_func_zip_open_0_arg1_str); - 	attribute_Deprecated_func_zip_open_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -  - 	zend_attribute *attribute_Deprecated_func_zip_close_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_close", sizeof("zip_close") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); --	zval attribute_Deprecated_func_zip_close_0_arg0; --	zend_string *attribute_Deprecated_func_zip_close_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_close_0_arg0, attribute_Deprecated_func_zip_close_0_arg0_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_close_0->args[0].value, &attribute_Deprecated_func_zip_close_0_arg0); -+	ZVAL_STR(&attribute_Deprecated_func_zip_close_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_0)); - 	attribute_Deprecated_func_zip_close_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); --	zval attribute_Deprecated_func_zip_close_0_arg1; - 	zend_string *attribute_Deprecated_func_zip_close_0_arg1_str = zend_string_init("use ZipArchive::close() instead", strlen("use ZipArchive::close() instead"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_close_0_arg1, attribute_Deprecated_func_zip_close_0_arg1_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_close_0->args[1].value, &attribute_Deprecated_func_zip_close_0_arg1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_close_0->args[1].value, attribute_Deprecated_func_zip_close_0_arg1_str); - 	attribute_Deprecated_func_zip_close_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -  - 	zend_attribute *attribute_Deprecated_func_zip_read_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_read", sizeof("zip_read") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); --	zval attribute_Deprecated_func_zip_read_0_arg0; --	zend_string *attribute_Deprecated_func_zip_read_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_read_0_arg0, attribute_Deprecated_func_zip_read_0_arg0_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_read_0->args[0].value, &attribute_Deprecated_func_zip_read_0_arg0); -+	ZVAL_STR(&attribute_Deprecated_func_zip_read_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_0)); - 	attribute_Deprecated_func_zip_read_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); --	zval attribute_Deprecated_func_zip_read_0_arg1; - 	zend_string *attribute_Deprecated_func_zip_read_0_arg1_str = zend_string_init("use ZipArchive::statIndex() instead", strlen("use ZipArchive::statIndex() instead"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_read_0_arg1, attribute_Deprecated_func_zip_read_0_arg1_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_read_0->args[1].value, &attribute_Deprecated_func_zip_read_0_arg1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_read_0->args[1].value, attribute_Deprecated_func_zip_read_0_arg1_str); - 	attribute_Deprecated_func_zip_read_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -  - 	zend_attribute *attribute_Deprecated_func_zip_entry_open_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_entry_open", sizeof("zip_entry_open") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 1); --	zval attribute_Deprecated_func_zip_entry_open_0_arg0; --	zend_string *attribute_Deprecated_func_zip_entry_open_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_entry_open_0_arg0, attribute_Deprecated_func_zip_entry_open_0_arg0_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_open_0->args[0].value, &attribute_Deprecated_func_zip_entry_open_0_arg0); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_open_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_0)); - 	attribute_Deprecated_func_zip_entry_open_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); -  - 	zend_attribute *attribute_Deprecated_func_zip_entry_close_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_entry_close", sizeof("zip_entry_close") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 1); --	zval attribute_Deprecated_func_zip_entry_close_0_arg0; --	zend_string *attribute_Deprecated_func_zip_entry_close_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_entry_close_0_arg0, attribute_Deprecated_func_zip_entry_close_0_arg0_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_close_0->args[0].value, &attribute_Deprecated_func_zip_entry_close_0_arg0); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_close_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_0)); - 	attribute_Deprecated_func_zip_entry_close_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); -  - 	zend_attribute *attribute_Deprecated_func_zip_entry_read_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_entry_read", sizeof("zip_entry_read") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); --	zval attribute_Deprecated_func_zip_entry_read_0_arg0; --	zend_string *attribute_Deprecated_func_zip_entry_read_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_entry_read_0_arg0, attribute_Deprecated_func_zip_entry_read_0_arg0_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_read_0->args[0].value, &attribute_Deprecated_func_zip_entry_read_0_arg0); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_read_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_0)); - 	attribute_Deprecated_func_zip_entry_read_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); --	zval attribute_Deprecated_func_zip_entry_read_0_arg1; - 	zend_string *attribute_Deprecated_func_zip_entry_read_0_arg1_str = zend_string_init("use ZipArchive::getFromIndex() instead", strlen("use ZipArchive::getFromIndex() instead"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_entry_read_0_arg1, attribute_Deprecated_func_zip_entry_read_0_arg1_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_read_0->args[1].value, &attribute_Deprecated_func_zip_entry_read_0_arg1); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_read_0->args[1].value, attribute_Deprecated_func_zip_entry_read_0_arg1_str); - 	attribute_Deprecated_func_zip_entry_read_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -  - 	zend_attribute *attribute_Deprecated_func_zip_entry_name_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_entry_name", sizeof("zip_entry_name") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); --	zval attribute_Deprecated_func_zip_entry_name_0_arg0; --	zend_string *attribute_Deprecated_func_zip_entry_name_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_entry_name_0_arg0, attribute_Deprecated_func_zip_entry_name_0_arg0_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_name_0->args[0].value, &attribute_Deprecated_func_zip_entry_name_0_arg0); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_name_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_0)); - 	attribute_Deprecated_func_zip_entry_name_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); --	zval attribute_Deprecated_func_zip_entry_name_0_arg1; --	zend_string *attribute_Deprecated_func_zip_entry_name_0_arg1_str = zend_string_init("use ZipArchive::statIndex() instead", strlen("use ZipArchive::statIndex() instead"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_entry_name_0_arg1, attribute_Deprecated_func_zip_entry_name_0_arg1_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_name_0->args[1].value, &attribute_Deprecated_func_zip_entry_name_0_arg1); -+	ZVAL_STR_COPY(&attribute_Deprecated_func_zip_entry_name_0->args[1].value, attribute_Deprecated_func_zip_read_0_arg1_str); - 	attribute_Deprecated_func_zip_entry_name_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -  - 	zend_attribute *attribute_Deprecated_func_zip_entry_compressedsize_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_entry_compressedsize", sizeof("zip_entry_compressedsize") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); --	zval attribute_Deprecated_func_zip_entry_compressedsize_0_arg0; --	zend_string *attribute_Deprecated_func_zip_entry_compressedsize_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_entry_compressedsize_0_arg0, attribute_Deprecated_func_zip_entry_compressedsize_0_arg0_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_compressedsize_0->args[0].value, &attribute_Deprecated_func_zip_entry_compressedsize_0_arg0); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_compressedsize_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_0)); - 	attribute_Deprecated_func_zip_entry_compressedsize_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); --	zval attribute_Deprecated_func_zip_entry_compressedsize_0_arg1; --	zend_string *attribute_Deprecated_func_zip_entry_compressedsize_0_arg1_str = zend_string_init("use ZipArchive::statIndex() instead", strlen("use ZipArchive::statIndex() instead"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_entry_compressedsize_0_arg1, attribute_Deprecated_func_zip_entry_compressedsize_0_arg1_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_compressedsize_0->args[1].value, &attribute_Deprecated_func_zip_entry_compressedsize_0_arg1); -+	ZVAL_STR_COPY(&attribute_Deprecated_func_zip_entry_compressedsize_0->args[1].value, attribute_Deprecated_func_zip_read_0_arg1_str); - 	attribute_Deprecated_func_zip_entry_compressedsize_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -  - 	zend_attribute *attribute_Deprecated_func_zip_entry_filesize_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_entry_filesize", sizeof("zip_entry_filesize") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); --	zval attribute_Deprecated_func_zip_entry_filesize_0_arg0; --	zend_string *attribute_Deprecated_func_zip_entry_filesize_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_entry_filesize_0_arg0, attribute_Deprecated_func_zip_entry_filesize_0_arg0_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_filesize_0->args[0].value, &attribute_Deprecated_func_zip_entry_filesize_0_arg0); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_filesize_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_0)); - 	attribute_Deprecated_func_zip_entry_filesize_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); --	zval attribute_Deprecated_func_zip_entry_filesize_0_arg1; --	zend_string *attribute_Deprecated_func_zip_entry_filesize_0_arg1_str = zend_string_init("use ZipArchive::statIndex() instead", strlen("use ZipArchive::statIndex() instead"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_entry_filesize_0_arg1, attribute_Deprecated_func_zip_entry_filesize_0_arg1_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_filesize_0->args[1].value, &attribute_Deprecated_func_zip_entry_filesize_0_arg1); -+	ZVAL_STR_COPY(&attribute_Deprecated_func_zip_entry_filesize_0->args[1].value, attribute_Deprecated_func_zip_read_0_arg1_str); - 	attribute_Deprecated_func_zip_entry_filesize_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); -  - 	zend_attribute *attribute_Deprecated_func_zip_entry_compressionmethod_0 = zend_add_function_attribute(zend_hash_str_find_ptr(CG(function_table), "zip_entry_compressionmethod", sizeof("zip_entry_compressionmethod") - 1), ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 2); --	zval attribute_Deprecated_func_zip_entry_compressionmethod_0_arg0; --	zend_string *attribute_Deprecated_func_zip_entry_compressionmethod_0_arg0_str = zend_string_init("8.0", strlen("8.0"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_entry_compressionmethod_0_arg0, attribute_Deprecated_func_zip_entry_compressionmethod_0_arg0_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_compressionmethod_0->args[0].value, &attribute_Deprecated_func_zip_entry_compressionmethod_0_arg0); -+	ZVAL_STR(&attribute_Deprecated_func_zip_entry_compressionmethod_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_0)); - 	attribute_Deprecated_func_zip_entry_compressionmethod_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); --	zval attribute_Deprecated_func_zip_entry_compressionmethod_0_arg1; --	zend_string *attribute_Deprecated_func_zip_entry_compressionmethod_0_arg1_str = zend_string_init("use ZipArchive::statIndex() instead", strlen("use ZipArchive::statIndex() instead"), 1); --	ZVAL_STR(&attribute_Deprecated_func_zip_entry_compressionmethod_0_arg1, attribute_Deprecated_func_zip_entry_compressionmethod_0_arg1_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_func_zip_entry_compressionmethod_0->args[1].value, &attribute_Deprecated_func_zip_entry_compressionmethod_0_arg1); -+	ZVAL_STR_COPY(&attribute_Deprecated_func_zip_entry_compressionmethod_0->args[1].value, attribute_Deprecated_func_zip_read_0_arg1_str); - 	attribute_Deprecated_func_zip_entry_compressionmethod_0->args[1].name = ZSTR_KNOWN(ZEND_STR_MESSAGE); - } -  -@@ -1323,10 +1273,7 @@ static zend_class_entry *register_class_ZipArchive(zend_class_entry *class_entry - #if defined(ZIP_FL_RECOMPRESS) -  - 	zend_attribute *attribute_Deprecated_const_FL_RECOMPRESS_0 = zend_add_class_constant_attribute(class_entry, const_FL_RECOMPRESS, ZSTR_KNOWN(ZEND_STR_DEPRECATED_CAPITALIZED), 1); --	zval attribute_Deprecated_const_FL_RECOMPRESS_0_arg0; --	zend_string *attribute_Deprecated_const_FL_RECOMPRESS_0_arg0_str = zend_string_init("8.3", strlen("8.3"), 1); --	ZVAL_STR(&attribute_Deprecated_const_FL_RECOMPRESS_0_arg0, attribute_Deprecated_const_FL_RECOMPRESS_0_arg0_str); --	ZVAL_COPY_VALUE(&attribute_Deprecated_const_FL_RECOMPRESS_0->args[0].value, &attribute_Deprecated_const_FL_RECOMPRESS_0_arg0); -+	ZVAL_STR(&attribute_Deprecated_const_FL_RECOMPRESS_0->args[0].value, ZSTR_KNOWN(ZEND_STR_8_DOT_3)); - 	attribute_Deprecated_const_FL_RECOMPRESS_0->args[0].name = ZSTR_KNOWN(ZEND_STR_SINCE); - #endif -  ---  -2.51.0 - @@ -2,8 +2,8 @@  zip  Zip => enabled -Zip version => 1.22.6 -Libzip version => 1.11.3 +Zip version => 1.22.7 +Libzip version => 1.11.4  BZIP2 compression => Yes  XZ compression => Yes  ZSTD compression => Yes @@ -1,4 +1,4 @@ -Extension [ <persistent> extension #66 zip version 1.22.6 ] { +Extension [ <persistent> extension #66 zip version 1.22.7 ] {    - Dependencies {      Dependency [ pcre (Required) ] @@ -189,7 +189,7 @@ Extension [ <persistent> extension #66 zip version 1.22.6 ] {          Constant [ public int EM_AES_192 ] { 258 }          Constant [ public int EM_AES_256 ] { 259 }          Constant [ public int EM_UNKNOWN ] { 65535 } -        Constant [ public string LIBZIP_VERSION ] { 1.11.3 } +        Constant [ public string LIBZIP_VERSION ] { 1.11.4 }          Constant [ public int LENGTH_TO_END ] { 0 }          Constant [ public int LENGTH_UNCHECKED ] { -2 }        } diff --git a/php-pecl-zip.spec b/php-pecl-zip.spec index 46f7dfa..74df757 100644 --- a/php-pecl-zip.spec +++ b/php-pecl-zip.spec @@ -25,7 +25,7 @@  %global pie_vend         pecl  %global pie_proj         zip -%global upstream_version 1.22.6 +%global upstream_version 1.22.7  #global upstream_prever  dev  #global upstream_lower   DEV  %global sources          %{pecl_name}-%{upstream_version}%{?upstream_prever} @@ -43,20 +43,13 @@  Summary:      A ZIP archive management extension  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:      1%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}}  License:      PHP-3.01  Group:        Development/Languages  URL:          https://pecl.php.net/package/zip  Source0:      https://pecl.php.net/get/%{sources}.tgz -Patch0:       0001-8.5-compat.patch -Patch1:       0001-fix-test-for-8.5.0beta2.patch -Patch2:       0001-Fix-leak-when-path-is-too-long-in-ZipArchive-extract.patch -Patch3:       0001-Fix-memory-leak-in-zip-when-encountering-empty-glob-.patch -Patch4:       0002-Fix-GH-19688-Remove-pattern-overflow-in-zip-addGlob.patch -Patch5:       0003-regen-arginfo.patch -  BuildRequires: make  BuildRequires: %{?dtsprefix}gcc  BuildRequires: %{?scl_prefix}php-devel @@ -121,14 +114,6 @@ sed -e 's/role="test"/role="src"/' \      -i package.xml  cd %{sources} -%patch -P0 -p1 -%patch -P1 -p1 -%patch -P2 -p1 -%patch -P3 -p1 -%patch -P4 -p1 -%patch -P5 -p1 -sed -e '/PHP_ZIP_VERSION/s/1.22.dev/%{version}/' -i php74/php_zip.h -  # Sanity check, really often broken  extver=$(sed -n '/#define PHP_ZIP_VERSION/{s/.* "//;s/".*$//;p}' php74/php_zip.h)  if test "x${extver}" != "x%{upstream_version}%{?upstream_prever}" -a "x${extver}" != "x%{upstream_version}-%{?upstream_prever}"; then @@ -252,6 +237,9 @@ TEST_PHP_EXECUTABLE=%{__ztsphp} \  %changelog +* Thu Sep 25 2025 Remi Collet <remi@remirepo.net> - 1.22.7-1 +- update to 1.22.7 +  * Thu Sep 25 2025 Remi Collet <remi@remirepo.net> - 1.22.6-6  - rebuild for PHP 8.5.0RC1  | 
