From ad08aa39561eb6aa3d03b2be06ed3894dbb2892c Mon Sep 17 00:00:00 2001 From: Mitch Hagstrand Date: Fri, 6 Jan 2017 02:14:12 -0800 Subject: [PATCH] Fix #70103: Fix bug 70103 when ZTS is enabled Used snprintf to copy the basename string before it is freed --- NEWS | 3 ++- ext/zip/php_zip.c | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index 3d7a45f027f13..d19ab0d5cf498 100644 --- a/NEWS +++ b/NEWS @@ -15,7 +15,8 @@ PHP NEWS . Fixed bug #69442 (closing of fd incorrect when PTS enabled). (jaytaph) - ZIP: - . Fixed bug #70103 (ZipArchive::addGlob ignores remove_all_path option). (cmb) + . Fixed bug #70103 (ZipArchive::addGlob ignores remove_all_path option). (cmb, + Mitch Hagstrand) 19 Jan 2017 PHP 7.0.15 diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index 67204b08b4759..20c4e86de0bd5 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -1699,18 +1699,18 @@ static void php_zip_add_from_pattern(INTERNAL_FUNCTION_PARAMETERS, int type) /* zval_ptr_dtor(return_value); RETURN_FALSE; } - snprintf(entry_name_buf, MAXPATHLEN, "%s%s", add_path, file_stripped); - entry_name = entry_name_buf; - entry_name_len = strlen(entry_name); } else { - entry_name = file_stripped; - entry_name_len = file_stripped_len; + snprintf(entry_name_buf, MAXPATHLEN, "%s", file_stripped); } + + entry_name = entry_name_buf; + entry_name_len = strlen(entry_name); if (basename) { zend_string_release(basename); basename = NULL; } + if (php_zip_add_file(intern, Z_STRVAL_P(zval_file), Z_STRLEN_P(zval_file), entry_name, entry_name_len, 0, 0) < 0) { zval_dtor(return_value);