diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index 43d8d27d564..96c3757a374 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -1571,6 +1571,9 @@ PHP_METHOD(ZipArchive, close) ze_obj->err_sys = 0; } + /* clear cache as empty zip are not created but deleted */ + php_clear_stat_cache(1, ze_obj->filename, ze_obj->filename_len); + efree(ze_obj->filename); ze_obj->filename = NULL; ze_obj->filename_len = 0; diff --git a/ext/zip/tests/bug_gh8781.phpt b/ext/zip/tests/bug_gh8781.phpt new file mode 100644 index 00000000000..25eadb70575 --- /dev/null +++ b/ext/zip/tests/bug_gh8781.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug GH-8781 (ZipArchive deletes zip file with no contents) +--SKIPIF-- + +--FILE-- +open($file, ZipArchive::CREATE | ZipArchive::OVERWRITE); +$zip->close(); + +var_dump(is_file($file)); +?> +--EXPECT-- +bool(true) +bool(false) +