]> granicus.if.org Git - php/commitdiff
Fix #80648: Fix for bug 79296 should be based on runtime version
authorChristoph M. Becker <cmbecker69@gmx.de>
Wed, 20 Jan 2021 14:24:47 +0000 (15:24 +0100)
committerChristoph M. Becker <cmbecker69@gmx.de>
Wed, 20 Jan 2021 15:20:13 +0000 (16:20 +0100)
Instead of checking for actually affected libzip versions, we now always
`ZIP_TRUNCATE` empty files unless `ZIP_RDONLY` is set.

Closes GH-6625.

NEWS
ext/zip/php_zip.c

diff --git a/NEWS b/NEWS
index ec8661c4c4be6ecb529f624fa13a3d5067931a0f..f3f071672514587226cf35ae92f25fe1b9e1fd20 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,10 @@ PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2021, PHP 7.4.16
 
+- Zip:
+  . Fixed bug #80648 (Fix for bug 79296 should be based on runtime version).
+    (cmb, Remi)
+
 21 Jan 2021, PHP 7.4.15
 
 - Core:
index 883b6f6d40a12bb85c8e8da341f1cbc80eedc5fe..21182068d1d7fb39fd5658e1edf9893d66dd9909 100644 (file)
@@ -1473,20 +1473,21 @@ static ZIPARCHIVE_METHOD(open)
                ze_obj->filename = NULL;
        }
 
-#if LIBZIP_VERSION_MAJOR > 1 || LIBZIP_VERSION_MAJOR == 1 && LIBZIP_VERSION_MINOR >= 6
-       /* reduce BC break introduce in libzip 1.6.0
-          "Do not accept empty files as valid zip archives any longer" */
-
        /* open for write without option to empty the archive */
+#ifdef ZIP_RDONLY
        if ((flags & (ZIP_TRUNCATE | ZIP_RDONLY)) == 0) {
+#else
+       if ((flags & ZIP_TRUNCATE) == 0) {
+#endif
                zend_stat_t st;
 
                /* exists and is empty */
                if (VCWD_STAT(resolved_path, &st) == 0 && st.st_size == 0) {
+                       /* reduce BC break introduced in libzip 1.6.0
+                          "Do not accept empty files as valid zip archives any longer" */
                        flags |= ZIP_TRUNCATE;
                }
        }
-#endif
 
        intern = zip_open(resolved_path, flags, &err);
        if (!intern || err) {