From 6adfb8c9621578c7ebb84091695d6cdc65cc0634 Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Wed, 20 Jan 2021 15:24:47 +0100 Subject: Fix #80648: Fix for bug 79296 should be based on runtime version Instead of checking for actually affected libzip versions, we now always `ZIP_TRUNCATE` empty files unless `ZIP_RDONLY` is set. Closes GH-6625. --- NEWS | 4 ++++ ext/zip/php_zip.c | 11 ++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index ec8661c4c4..f3f0716725 100644 --- 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: diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index 883b6f6d40..21182068d1 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -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) { -- cgit v1.2.1