From: Mikko Koppanen Date: Mon, 16 Mar 2009 10:22:13 +0000 (+0000) Subject: Closes bug #47667 X-Git-Tag: php-5.2.10RC1~295 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=109dc1e6f644f0e4ef2faca5a8c5b008a7aa6897;p=php Closes bug #47667 --- diff --git a/ext/zip/lib/zip_open.c b/ext/zip/lib/zip_open.c index 0880eef2c6..4b219556c8 100644 --- a/ext/zip/lib/zip_open.c +++ b/ext/zip/lib/zip_open.c @@ -65,6 +65,10 @@ zip_open(const char *fn, int flags, int *zep) struct zip_cdir *cdir; int i; off_t len; + + if (flags & ZIP_OVERWRITE) { + return _zip_allocate_new(fn, zep); + } switch (_zip_file_exists(fn, flags, zep)) { case -1: diff --git a/ext/zip/tests/bug47667.phpt b/ext/zip/tests/bug47667.phpt new file mode 100644 index 0000000000..960a3c5d7e --- /dev/null +++ b/ext/zip/tests/bug47667.phpt @@ -0,0 +1,40 @@ +--TEST-- +Bug #47667 (ZipArchive::OVERWRITE seems to have no effect) +--SKIPIF-- + +--FILE-- +open($filename, ZipArchive::CREATE) !== true) { + exit("Unable to open the zip file"); +} else { + $zip->addFromString('foo.txt', 'foo bar foobar'); + $zip->close(); +} + +for ($i = 0; $i < 10; $i++) { + $zip = new ZipArchive(); + if ($zip->open($filename, ZipArchive::OVERWRITE) !== true) { + exit("Unable to open the zip file"); + } + $zip->addFromString("foo_{$i}.txt", 'foo bar foobar'); + $zip->close(); +} + +$zip = new ZipArchive(); +if ($zip->open($filename, ZipArchive::CREATE) !== true) { + exit("Unable to open the zip file"); +} + +echo "files: " , $zip->numFiles; + +unlink($filename); + +--EXPECT-- +files: 1