Commit 0d440d37680 for php.net
commit 0d440d3768031e1405d83343bb0d01374ef10d4d
Author: Gina Peter Banyard <girgias@php.net>
Date: Tue Jul 28 13:06:23 2026 +0100
zip: convert ZIP option add_path to zend_string*
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c
index a35b7d5aaf9..2e1e8dc8625 100644
--- a/ext/zip/php_zip.c
+++ b/ext/zip/php_zip.c
@@ -354,8 +354,7 @@ static zend_result php_zip_add_file(ze_zip_object *obj, const char *filename, si
typedef struct {
zend_long remove_all_path;
const zend_string *remove_path;
- char *add_path;
- size_t add_path_len;
+ const zend_string *add_path;
zip_flags_t flags;
zip_int32_t comp_method;
zip_uint32_t comp_flags;
@@ -469,8 +468,7 @@ static zend_result php_zip_parse_options(HashTable *options, zip_options *opts)
zend_value_error("Option \"add_path\" must be less than %d bytes", MAXPATHLEN - 1);
return FAILURE;
}
- opts->add_path_len = Z_STRLEN_P(option);
- opts->add_path = Z_STRVAL_P(option);
+ opts->add_path = Z_STR_P(option);
}
if ((option = zend_hash_str_find(options, "flags", sizeof("flags") - 1)) != NULL) {
@@ -1849,16 +1847,16 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /*
}
if (opts.add_path) {
- if ((opts.add_path_len + file_stripped_len) > MAXPATHLEN) {
+ if ((ZSTR_LEN(opts.add_path) + file_stripped_len) > MAXPATHLEN) {
if (basename) {
zend_string_release_ex(basename, false);
}
- php_error_docref(NULL, E_WARNING, "Entry name too long (max: %d, %zd given)",
- MAXPATHLEN - 1, (opts.add_path_len + file_stripped_len));
+ php_error_docref(NULL, E_WARNING, "Entry name too long (max: %d, %zu given)",
+ MAXPATHLEN - 1, (ZSTR_LEN(opts.add_path) + 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);
+ snprintf(entry_name_buf, MAXPATHLEN, "%s%s", ZSTR_VAL(opts.add_path), file_stripped);
} else {
snprintf(entry_name_buf, MAXPATHLEN, "%s", file_stripped);
}