diff options
| author | Remi Collet <remi@remirepo.net> | 2020-08-19 07:47:04 +0200 | 
|---|---|---|
| committer | Remi Collet <remi@remirepo.net> | 2020-08-19 07:47:04 +0200 | 
| commit | c32cd9edd131e3a037c759f41c7f5fbe98ac32bf (patch) | |
| tree | 38ffdca6c3c37a461cbb1e54fdf5c5021e374da3 | |
| parent | 45a40e42710e26c1237408a53c86ad428887d273 (diff) | |
rebuild for 8.0.0beta2
| -rw-r--r-- | php-pecl-zip.spec | 6 | ||||
| -rw-r--r-- | zip-php8.patch | 775 | 
2 files changed, 704 insertions, 77 deletions
diff --git a/php-pecl-zip.spec b/php-pecl-zip.spec index a2dd1ed..e089347 100644 --- a/php-pecl-zip.spec +++ b/php-pecl-zip.spec @@ -35,13 +35,14 @@ Summary:      A ZIP archive management extension  Summary(fr):  Une extension de gestion des ZIP  Name:         %{?scl_prefix}php-pecl-zip  Version:      %{upstream_version}%{?upstream_prever:~%{upstream_lower}} -Release:      4%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} +Release:      5%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}}  License:      PHP  Group:        Development/Languages  URL:          https://pecl.php.net/package/zip  Source0:      https://pecl.php.net/get/%{pecl_name}-%{upstream_version}%{?upstream_prever}.tgz +# diff from previous tag for php8 and tests directories  Patch0:       %{pecl_name}-php8.patch  BuildRequires: %{?dtsprefix}gcc @@ -271,6 +272,9 @@ fi  #### TODO: SCLs on EL-8 still use libzip from default stream (7.2 => 1.5.1)  %changelog +* Mon Aug 17 2020 Remi Collet <remi@remirepo.net> - 1.19.0-5 +- rebuild for 8.0.0beta2 +  * Wed Aug  5 2020 Remi Collet <remi@remirepo.net> - 1.19.0-4  - rebuild for 8.0.0beta1 diff --git a/zip-php8.patch b/zip-php8.patch index 95b4e4c..6d14487 100644 --- a/zip-php8.patch +++ b/zip-php8.patch @@ -1,8 +1,25 @@  diff --git a/php8/php_zip.c b/php8/php_zip.c -index f131966..841488b 100644 +index f131966..43c2da9 100644  --- a/php8/php_zip.c  +++ b/php8/php_zip.c -@@ -334,7 +334,7 @@ typedef struct { +@@ -52,11 +52,12 @@ static int le_zip_entry; + 	} + /* }}} */ +  +-/* {{{  PHP_ZIP_STAT_PATH(za, path, path_len, flags, sb) */ ++/* {{{  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 < 1) { \ +-		php_error_docref(NULL, E_NOTICE, "Empty string as entry name"); \ +-		RETURN_FALSE; \ ++	if (path_len == 0) { \ ++		zend_argument_value_error(1, "cannot be empty"); \ ++		RETURN_THROWS(); \ + 	} \ + 	if (zip_stat(za, path, flags, &sb) != 0) { \ + 		RETURN_FALSE; \ +@@ -334,7 +335,7 @@ typedef struct {   #endif   } zip_options; @@ -11,21 +28,33 @@ index f131966..841488b 100644   /* {{{ */   {   	zval *option; -@@ -347,23 +347,23 @@ static int php_zip_parse_options(zval *options, zip_options *opts) +@@ -347,25 +348,42 @@ static int php_zip_parse_options(zval *options, zip_options *opts)   	opts->enc_method = -1;  /* -1 to not change default */   #endif  -	if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "remove_all_path", sizeof("remove_all_path") - 1)) != NULL) {  +	if ((option = zend_hash_str_find(options, "remove_all_path", sizeof("remove_all_path") - 1)) != NULL) { ++		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_type_name(option)); ++		}   		opts->remove_all_path = zval_get_long(option);   	}  -	if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "comp_method", sizeof("comp_method") - 1)) != NULL) {  +	if ((option = zend_hash_str_find(options, "comp_method", sizeof("comp_method") - 1)) != NULL) { ++		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_type_name(option)); ++		}   		opts->comp_method = zval_get_long(option);  -		if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "comp_flags", sizeof("comp_flags") - 1)) != NULL) {  +		if ((option = zend_hash_str_find(options, "comp_flags", sizeof("comp_flags") - 1)) != NULL) { ++			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_type_name(option)); ++			}   			opts->comp_flags = zval_get_long(option);   		}   	} @@ -33,41 +62,95 @@ index f131966..841488b 100644   #ifdef HAVE_ENCRYPTION  -	if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "enc_method", sizeof("enc_method") - 1)) != NULL) {  +	if ((option = zend_hash_str_find(options, "enc_method", sizeof("enc_method") - 1)) != NULL) { ++		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_type_name(option)); ++		}   		opts->enc_method = zval_get_long(option);  -		if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "enc_password", sizeof("enc_password") - 1)) != NULL) {  +		if ((option = zend_hash_str_find(options, "enc_password", sizeof("enc_password") - 1)) != NULL) {   			if (Z_TYPE_P(option) != IS_STRING) { - 				php_error_docref(NULL, E_WARNING, "enc_password option expected to be a string"); +-				php_error_docref(NULL, E_WARNING, "enc_password option expected to be a string"); ++				zend_type_error("Option \"enc_password\" must be of type string, %s given", ++					zend_zval_type_name(option));   				return -1; -@@ -373,7 +373,7 @@ static int php_zip_parse_options(zval *options, zip_options *opts) + 			} + 			opts->enc_password = Z_STRVAL_P(option); +@@ -373,49 +391,50 @@ static int php_zip_parse_options(zval *options, zip_options *opts)   	}   #endif  -	if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "remove_path", sizeof("remove_path") - 1)) != NULL) {  +	if ((option = zend_hash_str_find(options, "remove_path", sizeof("remove_path") - 1)) != NULL) {   		if (Z_TYPE_P(option) != IS_STRING) { - 			php_error_docref(NULL, E_WARNING, "remove_path option expected to be a string"); +-			php_error_docref(NULL, E_WARNING, "remove_path option expected to be a string"); ++			zend_type_error("Option \"remove_path\" must be of type string, %s given", ++				zend_zval_type_name(option)); + 			return -1; + 		} +  +-		if (Z_STRLEN_P(option) < 1) { +-			php_error_docref(NULL, E_NOTICE, "Empty string given as remove_path option"); ++		if (Z_STRLEN_P(option) == 0) { ++			zend_value_error("Option \"remove_path\" cannot be empty");   			return -1; -@@ -393,7 +393,7 @@ static int php_zip_parse_options(zval *options, zip_options *opts) + 		} +  + 		if (Z_STRLEN_P(option) >= MAXPATHLEN) { +-			php_error_docref(NULL, E_WARNING, "remove_path string is too long (max: %d, %zd given)", +-						MAXPATHLEN - 1, Z_STRLEN_P(option)); ++			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(Z_ARRVAL_P(options), "add_path", sizeof("add_path") - 1)) != NULL) {  +	if ((option = zend_hash_str_find(options, "add_path", sizeof("add_path") - 1)) != NULL) {   		if (Z_TYPE_P(option) != IS_STRING) { - 			php_error_docref(NULL, E_WARNING, "add_path option expected to be a string"); +-			php_error_docref(NULL, E_WARNING, "add_path option expected to be a string"); ++			zend_type_error("Option \"add_path\" must be of type string, %s given", ++				zend_zval_type_name(option)); + 			return -1; + 		} +  +-		if (Z_STRLEN_P(option) < 1) { +-			php_error_docref(NULL, E_NOTICE, "Empty string given as the add_path option"); ++		if (Z_STRLEN_P(option) == 0) { ++			zend_value_error("Option \"add_path\" cannot be empty"); + 			return -1; + 		} +  + 		if (Z_STRLEN_P(option) >= MAXPATHLEN) { +-			php_error_docref(NULL, E_WARNING, "add_path string too long (max: %d, %zd given)", +-						MAXPATHLEN - 1, Z_STRLEN_P(option)); ++			zend_value_error("Option \"add_path\" must be less than %d bytes", MAXPATHLEN - 1);   			return -1; -@@ -413,7 +413,7 @@ static int php_zip_parse_options(zval *options, zip_options *opts) + 		} + 		opts->add_path_len = Z_STRLEN_P(option);   		opts->add_path = Z_STRVAL_P(option);   	}  -	if ((option = zend_hash_str_find(Z_ARRVAL_P(options), "flags", sizeof("flags") - 1)) != NULL) {  +	if ((option = zend_hash_str_find(options, "flags", sizeof("flags") - 1)) != NULL) {   		if (Z_TYPE_P(option) != IS_LONG) { - 			php_error_docref(NULL, E_WARNING, "flags option expected to be a integer"); +-			php_error_docref(NULL, E_WARNING, "flags option expected to be a integer"); ++			zend_type_error("Option \"flags\" must be of type int, %s given", ++				zend_zval_type_name(option));   			return -1; -@@ -1101,8 +1101,7 @@ static PHP_MSHUTDOWN_FUNCTION(zip); + 		} + 		opts->flags = Z_LVAL_P(option); +@@ -599,6 +618,7 @@ int php_zip_glob(char *pattern, int pattern_len, zend_long flags, zval *return_v + 	} +  + 	if ((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; + 	} +@@ -1101,8 +1121,7 @@ static PHP_MSHUTDOWN_FUNCTION(zip);   static PHP_MINFO_FUNCTION(zip);   /* }}} */ @@ -77,7 +160,7 @@ index f131966..841488b 100644   zend_module_entry zip_module_entry = {   	STANDARD_MODULE_HEADER,   	"zip", -@@ -1122,8 +1121,7 @@ ZEND_GET_MODULE(zip) +@@ -1122,8 +1141,7 @@ ZEND_GET_MODULE(zip)   #endif   /* set macro */ @@ -87,7 +170,18 @@ index f131966..841488b 100644   PHP_FUNCTION(zip_open)   {   	char resolved_path[MAXPATHLEN + 1]; -@@ -1163,8 +1161,7 @@ PHP_FUNCTION(zip_open) +@@ -1136,8 +1154,8 @@ PHP_FUNCTION(zip_open) + 	} +  + 	if (ZSTR_LEN(filename) == 0) { +-		php_error_docref(NULL, E_WARNING, "Empty string as source"); +-		RETURN_FALSE; ++		zend_argument_value_error(1, "cannot be empty"); ++		RETURN_THROWS(); + 	} +  + 	if (ZIP_OPENBASEDIR_CHECKPATH(ZSTR_VAL(filename))) { +@@ -1163,8 +1181,7 @@ PHP_FUNCTION(zip_open)   }   /* }}} */ @@ -97,7 +191,7 @@ index f131966..841488b 100644   PHP_FUNCTION(zip_close)   {   	zval * zip; -@@ -1183,8 +1180,7 @@ PHP_FUNCTION(zip_close) +@@ -1183,8 +1200,7 @@ PHP_FUNCTION(zip_close)   }   /* }}} */ @@ -107,7 +201,7 @@ index f131966..841488b 100644   PHP_FUNCTION(zip_read)   {   	zval *zip_dp; -@@ -1229,8 +1225,7 @@ PHP_FUNCTION(zip_read) +@@ -1229,8 +1245,7 @@ PHP_FUNCTION(zip_read)   }   /* }}} */ @@ -117,7 +211,7 @@ index f131966..841488b 100644   /* Dummy function to follow the old API */   PHP_FUNCTION(zip_entry_open)   { -@@ -1261,8 +1256,7 @@ PHP_FUNCTION(zip_entry_open) +@@ -1261,8 +1276,7 @@ PHP_FUNCTION(zip_entry_open)   }   /* }}} */ @@ -127,7 +221,7 @@ index f131966..841488b 100644   PHP_FUNCTION(zip_entry_close)   {   	zval * zip_entry; -@@ -1280,8 +1274,7 @@ PHP_FUNCTION(zip_entry_close) +@@ -1280,8 +1294,7 @@ PHP_FUNCTION(zip_entry_close)   }   /* }}} */ @@ -137,7 +231,7 @@ index f131966..841488b 100644   PHP_FUNCTION(zip_entry_read)   {   	zval * zip_entry; -@@ -1374,40 +1367,35 @@ static void php_zip_entry_get_info(INTERNAL_FUNCTION_PARAMETERS, int opt) /* {{{ +@@ -1374,40 +1387,35 @@ static void php_zip_entry_get_info(INTERNAL_FUNCTION_PARAMETERS, int opt) /* {{{   }   /* }}} */ @@ -183,7 +277,18 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, open)   {   	struct zip *intern; -@@ -1452,16 +1440,20 @@ PHP_METHOD(ZipArchive, open) +@@ -1426,8 +1434,8 @@ PHP_METHOD(ZipArchive, open) + 	ze_obj = Z_ZIP_P(self); +  + 	if (ZSTR_LEN(filename) == 0) { +-		php_error_docref(NULL, E_WARNING, "Empty string as source"); +-		RETURN_FALSE; ++		zend_argument_value_error(1, "cannot be empty"); ++		RETURN_THROWS(); + 	} +  + 	if (ZIP_OPENBASEDIR_CHECKPATH(ZSTR_VAL(filename))) { +@@ -1452,16 +1460,20 @@ PHP_METHOD(ZipArchive, open)   		ze_obj->filename = NULL;   	} @@ -207,7 +312,7 @@ index f131966..841488b 100644   			flags |= ZIP_TRUNCATE;   		}   	} -@@ -1478,8 +1470,7 @@ PHP_METHOD(ZipArchive, open) +@@ -1478,8 +1490,7 @@ PHP_METHOD(ZipArchive, open)   }   /* }}} */ @@ -217,7 +322,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, setPassword)   {   	struct zip *intern; -@@ -1506,8 +1497,7 @@ PHP_METHOD(ZipArchive, setPassword) +@@ -1506,8 +1517,7 @@ PHP_METHOD(ZipArchive, setPassword)   }   /* }}} */ @@ -227,7 +332,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, close)   {   	struct zip *intern; -@@ -1558,8 +1548,7 @@ PHP_METHOD(ZipArchive, close) +@@ -1558,8 +1568,7 @@ PHP_METHOD(ZipArchive, close)   }   /* }}} */ @@ -237,7 +342,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, count)   {   	struct zip *intern; -@@ -1577,8 +1566,7 @@ PHP_METHOD(ZipArchive, count) +@@ -1577,8 +1586,7 @@ PHP_METHOD(ZipArchive, count)   }   /* }}} */ @@ -247,7 +352,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, getStatusString)   {   	zval *self = ZEND_THIS; -@@ -1621,8 +1609,7 @@ PHP_METHOD(ZipArchive, getStatusString) +@@ -1621,8 +1629,7 @@ PHP_METHOD(ZipArchive, getStatusString)   }   /* }}} */ @@ -257,7 +362,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, addEmptyDir)   {   	struct zip *intern; -@@ -1671,19 +1658,19 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* +@@ -1671,30 +1678,30 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /*   	char *path = ".";   	size_t  path_len = 1;   	zend_long glob_flags = 0; @@ -280,16 +385,22 @@ index f131966..841488b 100644   					&pattern, &path, &path_len, &options) == FAILURE) {   			RETURN_THROWS();   		} -@@ -1693,7 +1680,7 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* - 		php_error_docref(NULL, E_NOTICE, "Empty string as pattern"); - 		RETURN_FALSE; + 	} +  + 	if (ZSTR_LEN(pattern) == 0) { +-		php_error_docref(NULL, E_NOTICE, "Empty string as pattern"); +-		RETURN_FALSE; ++		zend_argument_value_error(1, "cannot be empty"); ++		RETURN_THROWS();   	}  -	if (options && zend_hash_num_elements(Z_ARRVAL_P(options)) > 0 && (php_zip_parse_options(options, &opts) < 0)) { +-		RETURN_FALSE;  +	if (options && zend_hash_num_elements(options) > 0 && (php_zip_parse_options(options, &opts) < 0)) { - 		RETURN_FALSE; ++		RETURN_THROWS();   	} -@@ -1778,24 +1765,21 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* + 	if (type == 1) { +@@ -1778,24 +1785,21 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /*   }   /* }}} */ @@ -317,7 +428,18 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, addFile)   {   	zval *self = ZEND_THIS; -@@ -1829,8 +1813,7 @@ PHP_METHOD(ZipArchive, addFile) +@@ -1811,8 +1815,8 @@ PHP_METHOD(ZipArchive, addFile) + 	} +  + 	if (ZSTR_LEN(filename) == 0) { +-		php_error_docref(NULL, E_NOTICE, "Empty string as filename"); +-		RETURN_FALSE; ++		zend_argument_value_error(1, "cannot be empty"); ++		RETURN_THROWS(); + 	} +  + 	if (entry_name_len == 0) { +@@ -1829,8 +1833,7 @@ PHP_METHOD(ZipArchive, addFile)   }   /* }}} */ @@ -327,7 +449,25 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, replaceFile)   {   	zval *self = ZEND_THIS; -@@ -1863,8 +1846,7 @@ PHP_METHOD(ZipArchive, replaceFile) +@@ -1845,13 +1848,13 @@ PHP_METHOD(ZipArchive, replaceFile) + 	} +  + 	if (ZSTR_LEN(filename) == 0) { +-		php_error_docref(NULL, E_NOTICE, "Empty string as filename"); +-		RETURN_FALSE; ++		zend_argument_value_error(1, "cannot be empty"); ++		RETURN_THROWS(); + 	} +  + 	if (index < 0) { +-		php_error_docref(NULL, E_NOTICE, "Invalid negative index"); +-		RETURN_FALSE; ++		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), +@@ -1863,8 +1866,7 @@ PHP_METHOD(ZipArchive, replaceFile)   }   /* }}} */ @@ -337,7 +477,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, addFromString)   {   	struct zip *intern; -@@ -1913,8 +1895,7 @@ PHP_METHOD(ZipArchive, addFromString) +@@ -1913,8 +1915,7 @@ PHP_METHOD(ZipArchive, addFromString)   }   /* }}} */ @@ -347,7 +487,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, statName)   {   	struct zip *intern; -@@ -1935,8 +1916,7 @@ PHP_METHOD(ZipArchive, statName) +@@ -1935,8 +1936,7 @@ PHP_METHOD(ZipArchive, statName)   }   /* }}} */ @@ -357,7 +497,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, statIndex)   {   	struct zip *intern; -@@ -1959,8 +1939,7 @@ PHP_METHOD(ZipArchive, statIndex) +@@ -1959,8 +1959,7 @@ PHP_METHOD(ZipArchive, statIndex)   }   /* }}} */ @@ -367,7 +507,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, locateName)   {   	struct zip *intern; -@@ -1989,8 +1968,7 @@ PHP_METHOD(ZipArchive, locateName) +@@ -1989,8 +1988,7 @@ PHP_METHOD(ZipArchive, locateName)   }   /* }}} */ @@ -377,7 +517,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, getNameIndex)   {   	struct zip *intern; -@@ -2015,8 +1993,7 @@ PHP_METHOD(ZipArchive, getNameIndex) +@@ -2015,8 +2013,7 @@ PHP_METHOD(ZipArchive, getNameIndex)   }   /* }}} */ @@ -387,7 +527,18 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, setArchiveComment)   {   	struct zip *intern; -@@ -2043,8 +2020,7 @@ PHP_METHOD(ZipArchive, setArchiveComment) +@@ -2031,8 +2028,8 @@ PHP_METHOD(ZipArchive, setArchiveComment) + 	ZIP_FROM_OBJECT(intern, self); +  + 	if (comment_len > 0xffff) { +-		php_error_docref(NULL, E_WARNING, "Comment must not exceed 65535 bytes"); +-		RETURN_FALSE; ++		zend_argument_value_error(1, "must be less than 65535 bytes"); ++		RETURN_THROWS(); + 	} +  + 	if (zip_set_archive_comment(intern, (const char *)comment, comment_len)) { +@@ -2043,8 +2040,7 @@ PHP_METHOD(ZipArchive, setArchiveComment)   }   /* }}} */ @@ -397,7 +548,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, getArchiveComment)   {   	struct zip *intern; -@@ -2067,8 +2043,7 @@ PHP_METHOD(ZipArchive, getArchiveComment) +@@ -2067,8 +2063,7 @@ PHP_METHOD(ZipArchive, getArchiveComment)   }   /* }}} */ @@ -407,7 +558,28 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, setCommentName)   {   	struct zip *intern; -@@ -2101,8 +2076,7 @@ PHP_METHOD(ZipArchive, setCommentName) +@@ -2082,15 +2077,16 @@ PHP_METHOD(ZipArchive, setCommentName) + 		RETURN_THROWS(); + 	} +  +-	if (name_len < 1) { +-		php_error_docref(NULL, E_NOTICE, "Empty string as entry name"); ++	if (name_len == 0) { ++		zend_argument_value_error(1, "cannot be empty"); ++		RETURN_THROWS(); + 	} +  + 	ZIP_FROM_OBJECT(intern, self); +  + 	if (comment_len > 0xffff) { +-		php_error_docref(NULL, E_WARNING, "Comment must not exceed 65535 bytes"); +-		RETURN_FALSE; ++		zend_argument_value_error(2, "must be less than 65535 bytes"); ++		RETURN_THROWS(); + 	} +  + 	idx = zip_name_locate(intern, name, 0); +@@ -2101,8 +2097,7 @@ PHP_METHOD(ZipArchive, setCommentName)   }   /* }}} */ @@ -417,7 +589,18 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, setCommentIndex)   {   	struct zip *intern; -@@ -2132,8 +2106,7 @@ PHP_METHOD(ZipArchive, setCommentIndex) +@@ -2120,8 +2115,8 @@ PHP_METHOD(ZipArchive, setCommentIndex) + 	ZIP_FROM_OBJECT(intern, self); +  + 	if (comment_len > 0xffff) { +-		php_error_docref(NULL, E_WARNING, "Comment must not exceed 65535 bytes"); +-		RETURN_FALSE; ++		zend_argument_value_error(2, "must be less than 65535 bytes"); ++		RETURN_THROWS(); + 	} +  + 	PHP_ZIP_STAT_INDEX(intern, index, 0, sb); +@@ -2132,8 +2127,7 @@ PHP_METHOD(ZipArchive, setCommentIndex)   /* those constants/functions are only available in libzip since 0.11.2 */   #ifdef ZIP_OPSYS_DEFAULT @@ -427,7 +610,23 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, setExternalAttributesName)   {   	struct zip *intern; -@@ -2166,8 +2139,7 @@ PHP_METHOD(ZipArchive, setExternalAttributesName) +@@ -2150,11 +2144,13 @@ PHP_METHOD(ZipArchive, setExternalAttributesName) +  + 	ZIP_FROM_OBJECT(intern, self); +  +-	if (name_len < 1) { +-		php_error_docref(NULL, E_NOTICE, "Empty string as entry name"); ++	if (name_len == 0) { ++		zend_argument_value_error(1, "cannot be empty"); ++		RETURN_THROWS(); + 	} +  + 	idx = zip_name_locate(intern, name, 0); ++ + 	if (idx < 0) { + 		RETURN_FALSE; + 	} +@@ -2166,8 +2162,7 @@ PHP_METHOD(ZipArchive, setExternalAttributesName)   }   /* }}} */ @@ -437,7 +636,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, setExternalAttributesIndex)   {   	struct zip *intern; -@@ -2191,8 +2163,7 @@ PHP_METHOD(ZipArchive, setExternalAttributesIndex) +@@ -2191,8 +2186,7 @@ PHP_METHOD(ZipArchive, setExternalAttributesIndex)   }   /* }}} */ @@ -447,7 +646,23 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, getExternalAttributesName)   {   	struct zip *intern; -@@ -2229,8 +2200,7 @@ PHP_METHOD(ZipArchive, getExternalAttributesName) +@@ -2211,11 +2205,13 @@ PHP_METHOD(ZipArchive, getExternalAttributesName) +  + 	ZIP_FROM_OBJECT(intern, self); +  +-	if (name_len < 1) { +-		php_error_docref(NULL, E_NOTICE, "Empty string as entry name"); ++	if (name_len == 0) { ++		zend_argument_value_error(1, "cannot be empty"); ++		RETURN_THROWS(); + 	} +  + 	idx = zip_name_locate(intern, name, 0); ++ + 	if (idx < 0) { + 		RETURN_FALSE; + 	} +@@ -2229,8 +2225,7 @@ PHP_METHOD(ZipArchive, getExternalAttributesName)   }   /* }}} */ @@ -457,7 +672,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, getExternalAttributesIndex)   {   	struct zip *intern; -@@ -2260,8 +2230,7 @@ PHP_METHOD(ZipArchive, getExternalAttributesIndex) +@@ -2260,8 +2255,7 @@ PHP_METHOD(ZipArchive, getExternalAttributesIndex)   #endif /* ifdef ZIP_OPSYS_DEFAULT */   #ifdef HAVE_ENCRYPTION @@ -467,7 +682,23 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, setEncryptionName)   {   	struct zip *intern; -@@ -2294,8 +2263,7 @@ PHP_METHOD(ZipArchive, setEncryptionName) +@@ -2278,11 +2272,13 @@ PHP_METHOD(ZipArchive, setEncryptionName) +  + 	ZIP_FROM_OBJECT(intern, self); +  +-	if (name_len < 1) { +-		php_error_docref(NULL, E_NOTICE, "Empty string as entry name"); ++	if (name_len == 0) { ++		zend_argument_value_error(1, "cannot be empty"); ++		RETURN_THROWS(); + 	} +  + 	idx = zip_name_locate(intern, name, 0); ++ + 	if (idx < 0) { + 		RETURN_FALSE; + 	} +@@ -2294,8 +2290,7 @@ PHP_METHOD(ZipArchive, setEncryptionName)   }   /* }}} */ @@ -477,7 +708,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, setEncryptionIndex)   {   	struct zip *intern; -@@ -2319,8 +2287,7 @@ PHP_METHOD(ZipArchive, setEncryptionIndex) +@@ -2319,8 +2314,7 @@ PHP_METHOD(ZipArchive, setEncryptionIndex)   /* }}} */   #endif @@ -487,7 +718,24 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, getCommentName)   {   	struct zip *intern; -@@ -2354,8 +2321,7 @@ PHP_METHOD(ZipArchive, getCommentName) +@@ -2339,12 +2333,13 @@ PHP_METHOD(ZipArchive, getCommentName) +  + 	ZIP_FROM_OBJECT(intern, self); +  +-	if (name_len < 1) { +-		php_error_docref(NULL, E_NOTICE, "Empty string as entry name"); +-		RETURN_FALSE; ++	if (name_len == 0) { ++		zend_argument_value_error(1, "cannot be empty"); ++		RETURN_THROWS(); + 	} +  + 	idx = zip_name_locate(intern, name, 0); ++ + 	if (idx < 0) { + 		RETURN_FALSE; + 	} +@@ -2354,8 +2349,7 @@ PHP_METHOD(ZipArchive, getCommentName)   }   /* }}} */ @@ -497,7 +745,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, getCommentIndex)   {   	struct zip *intern; -@@ -2378,8 +2344,7 @@ PHP_METHOD(ZipArchive, getCommentIndex) +@@ -2378,10 +2372,9 @@ PHP_METHOD(ZipArchive, getCommentIndex)   }   /* }}} */ @@ -505,9 +753,28 @@ index f131966..841488b 100644  -Set the compression of a file in zip, using its name */  +/* {{{ Set the compression of a file in zip, using its name */   PHP_METHOD(ZipArchive, setCompressionName) -  { +- { ++{   	struct zip *intern; -@@ -2413,8 +2378,7 @@ PHP_METHOD(ZipArchive, setCompressionName) + 	zval *this = ZEND_THIS; + 	size_t name_len; +@@ -2396,11 +2389,13 @@ PHP_METHOD(ZipArchive, setCompressionName) +  + 	ZIP_FROM_OBJECT(intern, this); +  +-	if (name_len < 1) { +-		php_error_docref(NULL, E_NOTICE, "Empty string as entry name"); ++	if (name_len == 0) { ++		zend_argument_value_error(1, "cannot be empty"); ++		RETURN_THROWS(); + 	} +  + 	idx = zip_name_locate(intern, name, 0); ++ + 	if (idx < 0) { + 		RETURN_FALSE; + 	} +@@ -2413,8 +2408,7 @@ PHP_METHOD(ZipArchive, setCompressionName)   }   /* }}} */ @@ -517,7 +784,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, setCompressionIndex)   {   	struct zip *intern; -@@ -2438,8 +2402,7 @@ PHP_METHOD(ZipArchive, setCompressionIndex) +@@ -2438,10 +2432,9 @@ PHP_METHOD(ZipArchive, setCompressionIndex)   /* }}} */   #ifdef HAVE_SET_MTIME @@ -525,9 +792,28 @@ index f131966..841488b 100644  -Set the modification time of a file in zip, using its name */  +/* {{{ Set the modification time of a file in zip, using its name */   PHP_METHOD(ZipArchive, setMtimeName) -  { +- { ++{   	struct zip *intern; -@@ -2473,8 +2436,7 @@ PHP_METHOD(ZipArchive, setMtimeName) + 	zval *this = ZEND_THIS; + 	size_t name_len; +@@ -2456,11 +2449,13 @@ PHP_METHOD(ZipArchive, setMtimeName) +  + 	ZIP_FROM_OBJECT(intern, this); +  +-	if (name_len < 1) { +-		php_error_docref(NULL, E_NOTICE, "Empty string as entry name"); ++	if (name_len == 0) { ++		zend_argument_value_error(1, "cannot be empty"); ++		RETURN_THROWS(); + 	} +  + 	idx = zip_name_locate(intern, name, 0); ++ + 	if (idx < 0) { + 		RETURN_FALSE; + 	} +@@ -2473,8 +2468,7 @@ PHP_METHOD(ZipArchive, setMtimeName)   }   /* }}} */ @@ -537,7 +823,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, setMtimeIndex)   {   	struct zip *intern; -@@ -2498,8 +2460,7 @@ PHP_METHOD(ZipArchive, setMtimeIndex) +@@ -2498,8 +2492,7 @@ PHP_METHOD(ZipArchive, setMtimeIndex)   /* }}} */   #endif @@ -547,7 +833,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, deleteIndex)   {   	struct zip *intern; -@@ -2524,8 +2485,7 @@ PHP_METHOD(ZipArchive, deleteIndex) +@@ -2524,8 +2517,7 @@ PHP_METHOD(ZipArchive, deleteIndex)   }   /* }}} */ @@ -557,7 +843,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, deleteName)   {   	struct zip *intern; -@@ -2552,8 +2512,7 @@ PHP_METHOD(ZipArchive, deleteName) +@@ -2552,8 +2544,7 @@ PHP_METHOD(ZipArchive, deleteName)   }   /* }}} */ @@ -567,7 +853,20 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, renameIndex)   {   	struct zip *intern; -@@ -2585,8 +2544,7 @@ PHP_METHOD(ZipArchive, renameIndex) +@@ -2572,9 +2563,9 @@ PHP_METHOD(ZipArchive, renameIndex) +  + 	ZIP_FROM_OBJECT(intern, self); +  +-	if (new_name_len < 1) { +-		php_error_docref(NULL, E_NOTICE, "Empty string as new entry name"); +-		RETURN_FALSE; ++	if (new_name_len == 0) { ++		zend_argument_value_error(2, "cannot be empty"); ++		RETURN_THROWS(); + 	} +  + 	if (zip_file_rename(intern, index, (const char *)new_name, 0) != 0) { +@@ -2585,8 +2576,7 @@ PHP_METHOD(ZipArchive, renameIndex)   }   /* }}} */ @@ -577,7 +876,20 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, renameName)   {   	struct zip *intern; -@@ -2616,8 +2574,7 @@ PHP_METHOD(ZipArchive, renameName) +@@ -2601,9 +2591,9 @@ PHP_METHOD(ZipArchive, renameName) +  + 	ZIP_FROM_OBJECT(intern, self); +  +-	if (new_name_len < 1) { +-		php_error_docref(NULL, E_NOTICE, "Empty string as new entry name"); +-		RETURN_FALSE; ++	if (new_name_len == 0) { ++		zend_argument_value_error(2, "cannot be empty"); ++		RETURN_THROWS(); + 	} +  + 	PHP_ZIP_STAT_PATH(intern, name, name_len, 0, sb); +@@ -2616,8 +2606,7 @@ PHP_METHOD(ZipArchive, renameName)   }   /* }}} */ @@ -587,7 +899,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, unchangeIndex)   {   	struct zip *intern; -@@ -2642,8 +2599,7 @@ PHP_METHOD(ZipArchive, unchangeIndex) +@@ -2642,8 +2631,7 @@ PHP_METHOD(ZipArchive, unchangeIndex)   }   /* }}} */ @@ -597,7 +909,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, unchangeName)   {   	struct zip *intern; -@@ -2672,8 +2628,7 @@ PHP_METHOD(ZipArchive, unchangeName) +@@ -2672,8 +2660,7 @@ PHP_METHOD(ZipArchive, unchangeName)   }   /* }}} */ @@ -607,7 +919,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, unchangeAll)   {   	struct zip *intern; -@@ -2693,8 +2648,7 @@ PHP_METHOD(ZipArchive, unchangeAll) +@@ -2693,8 +2680,7 @@ PHP_METHOD(ZipArchive, unchangeAll)   }   /* }}} */ @@ -617,7 +929,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, unchangeArchive)   {   	struct zip *intern; -@@ -2714,8 +2668,7 @@ PHP_METHOD(ZipArchive, unchangeArchive) +@@ -2714,8 +2700,7 @@ PHP_METHOD(ZipArchive, unchangeArchive)   }   /* }}} */ @@ -627,7 +939,7 @@ index f131966..841488b 100644   /* TODO:    * - allow index or array of indices    * - replace path -@@ -2868,24 +2821,21 @@ static void php_zip_get_from(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */ +@@ -2868,24 +2853,21 @@ static void php_zip_get_from(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */   }   /* }}} */ @@ -655,7 +967,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, getStream)   {   	struct zip *intern; -@@ -2925,13 +2875,12 @@ static void _php_zip_progress_callback(zip_t *arch, double state, void *ptr) +@@ -2925,35 +2907,23 @@ static void _php_zip_progress_callback(zip_t *arch, double state, void *ptr)   	ze_zip_object *obj = ptr;   	ZVAL_DOUBLE(&cb_args[0], state); @@ -671,7 +983,43 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, registerProgressCallback)   {   	struct zip *intern; -@@ -2981,7 +2930,7 @@ static int _php_zip_cancel_callback(zip_t *arch, void *ptr) +-	zval *self = getThis(); ++	zval *self = ZEND_THIS; + 	double rate; +-	zval *callback; ++	zend_fcall_info fci; ++	zend_fcall_info_cache fcc; + 	ze_zip_object *obj; +  +-	if (!self) { +-		RETURN_FALSE; +-	} +- +-	if (zend_parse_parameters(ZEND_NUM_ARGS(), "dz", &rate, &callback) == FAILURE) { +-		return; +-	} +- +-	/* callable? */ +-	if (!zend_is_callable(callback, 0, NULL)) { +-		zend_string *callback_name = zend_get_callable_name(callback); +-		php_error_docref(NULL, E_WARNING, "Invalid callback '%s'", ZSTR_VAL(callback_name)); +-		zend_string_release_ex(callback_name, 0); +-		RETURN_FALSE; ++	if (zend_parse_parameters(ZEND_NUM_ARGS(), "df", &rate, &fci, &fcc) == FAILURE) { ++		RETURN_THROWS(); + 	} +  + 	ZIP_FROM_OBJECT(intern, self); +@@ -2964,7 +2934,7 @@ PHP_METHOD(ZipArchive, registerProgressCallback) + 	_php_zip_progress_callback_free(obj); +  + 	/* register */ +-	ZVAL_COPY(&obj->progress_callback, callback); ++	ZVAL_COPY(&obj->progress_callback, &fci.function_name); + 	if (zip_register_progress_callback_with_state(intern, rate, _php_zip_progress_callback, _php_zip_progress_callback_free, obj)) { + 		RETURN_FALSE; + 	} +@@ -2981,7 +2951,7 @@ static int _php_zip_cancel_callback(zip_t *arch, void *ptr)   	int retval = 0;   	ze_zip_object *obj = ptr; @@ -680,7 +1028,7 @@ index f131966..841488b 100644   		retval = zval_get_long(&cb_retval);   		zval_ptr_dtor(&cb_retval);   	} -@@ -2989,8 +2938,7 @@ static int _php_zip_cancel_callback(zip_t *arch, void *ptr) +@@ -2989,40 +2959,27 @@ static int _php_zip_cancel_callback(zip_t *arch, void *ptr)   	return retval;   } @@ -690,7 +1038,45 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, registerCancelCallback)   {   	struct zip *intern; -@@ -3033,8 +2981,7 @@ PHP_METHOD(ZipArchive, registerCancelCallback) +-	zval *self = getThis(); +-	zval *callback; ++	zval *self = ZEND_THIS; ++	zend_fcall_info fci; ++	zend_fcall_info_cache fcc; + 	ze_zip_object *obj; +- +-	if (!self) { +-		RETURN_FALSE; +-	} +- +-	if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &callback) == FAILURE) { +-		return; ++	if (zend_parse_parameters(ZEND_NUM_ARGS(), "f", &fci, &fcc) == FAILURE) { ++		RETURN_THROWS(); + 	} +  + 	ZIP_FROM_OBJECT(intern, self); +  +-	/* callable? */ +-	if (!zend_is_callable(callback, 0, NULL)) { +-		zend_string *callback_name = zend_get_callable_name(callback); +-		php_error_docref(NULL, E_WARNING, "Invalid callback '%s'", ZSTR_VAL(callback_name)); +-		zend_string_release_ex(callback_name, 0); +-		RETURN_FALSE; +-	} +- + 	obj = Z_ZIP_P(self); +  + 	/* free if called twice */ + 	_php_zip_cancel_callback_free(obj); +  + 	/* register */ +-	ZVAL_COPY(&obj->cancel_callback, callback); ++	ZVAL_COPY(&obj->cancel_callback, &fci.function_name); + 	if (zip_register_cancel_callback_with_state(intern, _php_zip_cancel_callback, _php_zip_cancel_callback_free, obj)) { + 		RETURN_FALSE; + 	} +@@ -3033,8 +2990,7 @@ PHP_METHOD(ZipArchive, registerCancelCallback)   #endif   #ifdef HAVE_METHOD_SUPPORTED @@ -700,7 +1086,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, isCompressionMethodSupported)   {   	zend_long method; -@@ -3047,8 +2994,7 @@ PHP_METHOD(ZipArchive, isCompressionMethodSupported) +@@ -3047,8 +3003,7 @@ PHP_METHOD(ZipArchive, isCompressionMethodSupported)   }   /* }}} */ @@ -710,7 +1096,7 @@ index f131966..841488b 100644   PHP_METHOD(ZipArchive, isEncryptionMethodSupported)   {   	zend_long method; -@@ -3136,6 +3082,9 @@ static PHP_MINIT_FUNCTION(zip) +@@ -3136,6 +3091,9 @@ static PHP_MINIT_FUNCTION(zip)   #ifdef ZIP_CM_LZMA2   	REGISTER_ZIP_CLASS_CONST_LONG("CM_LZMA2", ZIP_CM_LZMA2);   #endif @@ -720,7 +1106,7 @@ index f131966..841488b 100644   #ifdef ZIP_CM_XZ   	REGISTER_ZIP_CLASS_CONST_LONG("CM_XZ", ZIP_CM_XZ);   #endif -@@ -3240,8 +3189,7 @@ static PHP_MINIT_FUNCTION(zip) +@@ -3240,8 +3198,7 @@ static PHP_MINIT_FUNCTION(zip)   }   /* }}} */ @@ -730,7 +1116,7 @@ index f131966..841488b 100644   static PHP_MSHUTDOWN_FUNCTION(zip)   {   	zend_hash_destroy(&zip_prop_handlers); -@@ -3250,8 +3198,7 @@ static PHP_MSHUTDOWN_FUNCTION(zip) +@@ -3250,8 +3207,7 @@ static PHP_MSHUTDOWN_FUNCTION(zip)   }   /* }}} */ @@ -740,8 +1126,21 @@ index f131966..841488b 100644   static PHP_MINFO_FUNCTION(zip)   {   	php_info_print_table_start(); +diff --git a/php8/php_zip.h b/php8/php_zip.h +index ddc35df..92df580 100644 +--- a/php8/php_zip.h ++++ b/php8/php_zip.h +@@ -31,7 +31,7 @@ extern zend_module_entry zip_module_entry; + #define ZIP_OVERWRITE ZIP_TRUNCATE + #endif +  +-#define PHP_ZIP_VERSION "1.19.0" ++#define PHP_ZIP_VERSION "1.19.1-dev" +  + #define ZIP_OPENBASEDIR_CHECKPATH(filename) php_check_open_basedir(filename) +   diff --git a/php8/php_zip.stub.php b/php8/php_zip.stub.php -index da8e373..4d9ba27 100644 +index da8e373..01f055f 100644  --- a/php8/php_zip.stub.php  +++ b/php8/php_zip.stub.php  @@ -2,44 +2,66 @@ @@ -817,7 +1216,28 @@ index da8e373..4d9ba27 100644   function zip_entry_compressionmethod($zip_entry): string|false {}   class ZipArchive -@@ -194,9 +216,9 @@ class ZipArchive +@@ -161,10 +183,18 @@ class ZipArchive +     /** @return bool */ +     public function setExternalAttributesIndex(int $index, int $opsys, int $attr, int $flags = 0) {} +  +-    /** @return bool */ ++    /** ++     * @param int $opsys ++     * @param int $attr ++     * @return bool ++     */ +     public function getExternalAttributesName(string $name, &$opsys, &$attr, int $flags = 0) {} +  +-    /** @return bool */ ++    /** ++     * @param int $opsys ++     * @param int $attr ++     * @return bool ++     */ +     public function getExternalAttributesIndex(int $index, &$opsys, &$attr, int $flags = 0) {} + #endif +  +@@ -194,9 +224,9 @@ class ZipArchive   #ifdef HAVE_METHOD_SUPPORTED       /** @return bool */ @@ -830,13 +1250,13 @@ index da8e373..4d9ba27 100644   #endif   }  diff --git a/php8/php_zip_arginfo.h b/php8/php_zip_arginfo.h -index c1e8f24..25157d8 100644 +index c1e8f24..87222c9 100644  --- a/php8/php_zip_arginfo.h  +++ b/php8/php_zip_arginfo.h  @@ -1,4 +1,5 @@  -/* This is a generated file, edit the .stub.php file instead. */  +/* This is a generated file, edit the .stub.php file instead. -+ * Stub hash: 95608dd1d6c2ad80ada990a9e939b76dba705d48 */ ++ * Stub hash: 880148896a71ad9bd076bb42c735ff1b83cd0731 */   ZEND_BEGIN_ARG_INFO_EX(arginfo_zip_open, 0, 0, 1)   	ZEND_ARG_TYPE_INFO(0, filename, IS_STRING, 0) @@ -958,6 +1378,172 @@ index 56cc37c..7770f64 100644   --FILE--   <?php +diff --git a/tests/oo_getcomment2.phpt b/tests/oo_getcomment2.phpt +index 89570a3..113c6b6 100644 +--- a/tests/oo_getcomment2.phpt ++++ b/tests/oo_getcomment2.phpt +@@ -17,16 +17,20 @@ if (!$zip->open($file)) { + echo $zip->getArchiveComment() . "\n"; +  + $idx = $zip->locateName('foo'); +-echo $zip->getCommentName('foo') . "\n"; +-echo $zip->getCommentIndex($idx); ++var_dump($zip->getCommentName('foo')); ++var_dump($zip->getCommentIndex($idx)); +  +-echo $zip->getCommentName('') . "\n"; ++try { ++    echo $zip->getCommentName('') . "\n"; ++} catch (\ValueError $e) { ++    echo $e->getMessage() . \PHP_EOL; ++} +  + $zip->close(); +  + ?> +---EXPECTF-- ++--EXPECT-- + Zip archive comment +-foo comment +-foo comment +-Notice: ZipArchive::getCommentName(): Empty string as entry name in %s on line %d ++string(11) "foo comment" ++string(11) "foo comment" ++ZipArchive::getCommentName(): Argument #1 ($name) cannot be empty +diff --git a/tests/oo_open.phpt b/tests/oo_open.phpt +index 0760db3..bd251e7 100644 +--- a/tests/oo_open.phpt ++++ b/tests/oo_open.phpt +@@ -4,6 +4,7 @@ zip::open() function + <?php + /* $Id$ */ + if(!extension_loaded('zip')) die('skip'); ++if (PHP_VERSION_ID >= 80000) die('skip PHP < 8 only'); + ?> + --FILE-- + <?php +diff --git a/tests/oo_open2.phpt b/tests/oo_open2.phpt +new file mode 100644 +index 0000000..337b8c6 +--- /dev/null ++++ b/tests/oo_open2.phpt +@@ -0,0 +1,49 @@ ++--TEST-- ++zip::open() function ++--SKIPIF-- ++<?php ++if(!extension_loaded('zip')) die('skip'); ++if (PHP_VERSION_ID < 80000) die('skip PHP 8 only'); ++?> ++--FILE-- ++<?php ++ ++$dirname = __DIR__ . '/'; ++$zip = new ZipArchive; ++$r = $zip->open($dirname . 'nofile'); ++if ($r !== TRUE) { ++    echo "ER_OPEN: ok\n"; ++} else { ++    echo "ER_OPEN: FAILED\n"; ++} ++ ++$r = $zip->open($dirname . 'nofile', ZIPARCHIVE::CREATE); ++if (!$r) { ++    echo "create: failed\n"; ++} else { ++    echo "create: ok\n"; ++} ++@unlink($dirname . 'nofile'); ++ ++$zip = new ZipArchive; ++try { ++    $zip->open(''); ++} catch (\ValueError $e) { ++    echo $e->getMessage() . \PHP_EOL; ++} ++ ++if (!$zip->open($dirname . 'test.zip')) { ++    exit("failed 1\n"); ++} ++ ++if ($zip->status == ZIPARCHIVE::ER_OK) { ++    echo "OK\n"; ++} else { ++    echo "failed\n"; ++} ++?> ++--EXPECT-- ++ER_OPEN: ok ++create: ok ++ZipArchive::open(): Argument #1 ($filename) cannot be empty ++OK +diff --git a/tests/oo_setcomment_error.phpt b/tests/oo_setcomment_error.phpt +index a8f1e47..b5b251b 100644 +--- a/tests/oo_setcomment_error.phpt ++++ b/tests/oo_setcomment_error.phpt +@@ -3,6 +3,7 @@ setComment error behavior + --SKIPIF-- + <?php + if(!extension_loaded('zip')) die('skip zip extension not available'); ++if (PHP_VERSION_ID >= 80000) die('skip PHP < 8 only'); + ?> + --FILE-- + <?php +diff --git a/tests/oo_setcomment_error2.phpt b/tests/oo_setcomment_error2.phpt +new file mode 100644 +index 0000000..9622e0f +--- /dev/null ++++ b/tests/oo_setcomment_error2.phpt +@@ -0,0 +1,49 @@ ++--TEST-- ++setComment error behavior ++--SKIPIF-- ++<?php ++if(!extension_loaded('zip')) die('skip zip extension not available'); ++if (PHP_VERSION_ID < 80000) die('skip PHP 8 only'); ++?> ++--FILE-- ++<?php ++$file = __DIR__ . '/__tmp_oo_set_comment_error.zip'; ++ ++@unlink($file); ++ ++$zip = new ZipArchive; ++if (!$zip->open($file, ZIPARCHIVE::CREATE)) { ++    exit('failed'); ++} ++ ++$zip->addFromString('entry1.txt', 'entry #1'); ++$zip->addFromString('entry2.txt', 'entry #2'); ++ ++$longComment = str_repeat('a', 0x10000); ++ ++try { ++    var_dump($zip->setArchiveComment($longComment)); ++} catch (\ValueError $e) { ++    echo $e->getMessage() . \PHP_EOL; ++} ++try { ++    var_dump($zip->setCommentName('entry1.txt', $longComment)); ++} catch (\ValueError $e) { ++    echo $e->getMessage() . \PHP_EOL; ++} ++try { ++    var_dump($zip->setCommentIndex(1, $longComment)); ++} catch (\ValueError $e) { ++    echo $e->getMessage() . \PHP_EOL; ++} ++ ++$zip->close(); ++?> ++--EXPECT-- ++ZipArchive::setArchiveComment(): Argument #1 ($comment) must be less than 65535 bytes ++ZipArchive::setCommentName(): Argument #2 ($comment) must be less than 65535 bytes ++ZipArchive::setCommentIndex(): Argument #2 ($comment) must be less than 65535 bytes ++--CLEAN-- ++<?php ++@unlink(__DIR__ . '/__tmp_oo_set_comment_error.zip'); ++?>  diff --git a/tests/oo_setcompression.phpt b/tests/oo_setcompression.phpt  index 8a746a8..fd5fb54 100644  --- a/tests/oo_setcompression.phpt @@ -1114,3 +1700,40 @@ index 5cadb2d..af72879 100644   --FILE--   <?php   $zip = zip_open(dirname(__FILE__)."/test_procedural.zip"); +diff --git a/tests/zip_open_error2.phpt b/tests/zip_open_error2.phpt +new file mode 100644 +index 0000000..01e0e20 +--- /dev/null ++++ b/tests/zip_open_error2.phpt +@@ -0,0 +1,31 @@ ++--TEST-- ++zip_open() error conditions ++--CREDITS-- ++Birgitte Kvarme <bitta@redpill-linpro.com> ++#PHPTestFest2009 Norway 2009-06-09 \o/ ++--SKIPIF-- ++<?php ++if(!extension_loaded('zip')) die('skip'); ++if (PHP_VERSION_ID < 80000) die('skip PHP 8 only'); ++?> ++--FILE-- ++<?php ++echo "Test case 1:"; ++try { ++    $zip = zip_open(""); ++} catch (\ValueError $e) { ++    echo $e->getMessage() . \PHP_EOL; ++} ++ ++echo "Test case 2:\n"; ++$zip = zip_open("/non_exisitng_directory/test_procedural.zip"); ++echo is_resource($zip) ? "OK" : "Failure"; ++?> ++--EXPECTF-- ++Test case 1: ++Deprecated: Function zip_open() is deprecated in %s on line %d ++zip_open(): Argument #1 ($filename) cannot be empty ++Test case 2: ++ ++Deprecated: Function zip_open() is deprecated in %s on line %d ++Failure  | 
