diff options
-rw-r--r-- | ext/zip/php_zip.c | 8 | ||||
-rw-r--r-- | ext/zip/tests/bug8700.phpt | 30 |
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 |