]> granicus.if.org Git - php/commitdiff
Closes bug #47667
authorMikko Koppanen <mkoppanen@php.net>
Mon, 16 Mar 2009 10:19:43 +0000 (10:19 +0000)
committerMikko Koppanen <mkoppanen@php.net>
Mon, 16 Mar 2009 10:19:43 +0000 (10:19 +0000)
ext/zip/lib/zip_open.c
ext/zip/tests/bug47667.phpt [new file with mode: 0644]

index cd782817901cd3b3d2953544a9d4721cccc5028b..dbab6ec4afc8ba86ae13aafdb146a981d414f750 100644 (file)
@@ -66,6 +66,9 @@ zip_open(const char *fn, int flags, int *zep)
     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 (file)
index 0000000..960a3c5
--- /dev/null
@@ -0,0 +1,40 @@
+--TEST--
+Bug #47667 (ZipArchive::OVERWRITE seems to have no effect)
+--SKIPIF--
+<?php
+/* $Id$ */
+if(!extension_loaded('zip')) die('skip');
+?>
+--FILE--
+<?php
+$thisdir = dirname(__FILE__);
+$filename = $thisdir . "/bug47667.zip";
+
+$zip = new ZipArchive();
+if ($zip->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