summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/zip/php_zip.c8
-rw-r--r--ext/zip/tests/bug8700.phpt30
2 files changed, 36 insertions, 2 deletions
diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c
index e684de1417..279bac2858 100644
--- a/ext/zip/php_zip.c
+++ b/ext/zip/php_zip.c
@@ -1744,7 +1744,7 @@ static void php_zip_get_from(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
char *filename;
int filename_len;
- long index;
+ long index = -1;
long flags = 0;
long len = 0;
@@ -1778,8 +1778,12 @@ static void php_zip_get_from(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
if (len < 1) {
len = sb.size;
}
+ if (index >= 0) {
+ zf = zip_fopen_index(intern, index, flags);
+ } else {
+ zf = zip_fopen(intern, filename, flags);
+ }
- zf = zip_fopen(intern, filename, flags);
if (zf == NULL) {
RETURN_FALSE;
}
diff --git a/ext/zip/tests/bug8700.phpt b/ext/zip/tests/bug8700.phpt
new file mode 100644
index 0000000000..5e7df4560b
--- /dev/null
+++ b/ext/zip/tests/bug8700.phpt
@@ -0,0 +1,30 @@
+--TEST--
+bug #8700, getFromIndex(0) fails
+--SKIPIF--
+<?php
+/* $Id$ */
+if(!extension_loaded('zip')) die('skip');
+?>
+--FILE--
+<?php
+$thisdir = dirname(__FILE__);
+$filename = $thisdir . "/bug8009.zip";
+
+$zip = new ZipArchive();
+
+if ($zip->open($filename) === FALSE) {
+ exit("cannot open $filename\n");
+}
+$contents_from_idx = $zip->getFromIndex(0);
+$contents_from_name = $zip->getFromName('1.txt');
+if ($contents_from_idx != $contents_from_name) {
+ echo "failed:";
+ var_dump($content_from_idx, $content_from_name);
+}
+
+$zip->close();
+echo "status: " . $zip->status . "\n";
+echo "\n";
+
+--EXPECT--
+status: 0