cvs: php-src(PHP_5_3) /ext/phar phar.c /ext/phar/tests/zip unixzip.phpt
| From: | Greg Beaver | Date: | Thu, 29 May 2008 17:34:50 +0000 |
| Subject: | cvs: php-src(PHP_5_3) /ext/phar phar.c /ext/phar/tests/zip unixzip.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-50198@lists.php.net to get a copy of this message | ||
cellog Thu May 29 17:34:50 2008 UTC
Modified files: (Branch: PHP_5_3)
/php-src/ext/phar phar.c
/php-src/ext/phar/tests/zip unixzip.phpt
Log:
fix PECL bug #13981: Third-party zips fail entry interrogation
http://cvs.php.net/viewvc.cgi/php-src/ext/phar/phar.c?r1=1.370.2.6&r2=1.370.2.7&diff_format=u
Index: php-src/ext/phar/phar.c
diff -u php-src/ext/phar/phar.c:1.370.2.6 php-src/ext/phar/phar.c:1.370.2.7
--- php-src/ext/phar/phar.c:1.370.2.6 Wed May 28 21:42:21 2008
+++ php-src/ext/phar/phar.c Thu May 29 17:34:49 2008
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: phar.c,v 1.370.2.6 2008/05/28 21:42:21 stas Exp $ */
+/* $Id: phar.c,v 1.370.2.7 2008/05/29 17:34:49 cellog Exp $ */
#define PHAR_MAIN 1
#include "phar_internal.h"
@@ -1980,15 +1980,16 @@
spprintf(error, 0, "phar error: internal corruption of zip-based phar \"%s\"
(cannot read local file header for file \"%s\")", idata->phar->fname,
entry->filename);
return FAILURE;
}
- /* fix up for big-endian systems */
- /* verify local header if not yet verified */
+ /* verify local header */
if (entry->filename_len != PHAR_ZIP_16(local.filename_len) || entry->crc32 !=
PHAR_ZIP_32(local.crc32) || entry->uncompressed_filesize != PHAR_ZIP_32(local.uncompsize) ||
entry->compressed_filesize != PHAR_ZIP_32(local.compsize)) {
spprintf(error, 0, "phar error: internal corruption of zip-based phar \"%s\"
(local head of file \"%s\" does not match central directory)",
idata->phar->fname, entry->filename);
return FAILURE;
}
- if (-1 == php_stream_seek(idata->phar->fp, PHAR_ZIP_16(local.filename_len) +
PHAR_ZIP_16(local.extra_len), SEEK_CUR)) {
- spprintf(error, 0, "phar error: internal corruption of zip-based phar \"%s\"
(cannot seek to start of file data for file \"%s\")", idata->phar->fname,
entry->filename);
- return FAILURE;
+ /* construct actual offset to file start - local extra_len can be different from central
extra_len */
+ entry->offset = entry->offset_abs =
+ sizeof(local) + entry->header_offset + PHAR_ZIP_16(local.filename_len) +
PHAR_ZIP_16(local.extra_len);
+ if (idata->zero != entry->offset_abs) {
+ idata->zero = entry->offset_abs;
}
}
php_stream_seek(fp, idata->zero, SEEK_SET);
@@ -3051,7 +3052,7 @@
php_info_print_table_header(2, "Phar: PHP Archive support", "enabled");
php_info_print_table_row(2, "Phar EXT version", PHP_PHAR_VERSION);
php_info_print_table_row(2, "Phar API version", PHP_PHAR_API_VERSION);
- php_info_print_table_row(2, "CVS revision", "$Revision: 1.370.2.6 $");
+ php_info_print_table_row(2, "CVS revision", "$Revision: 1.370.2.7 $");
php_info_print_table_row(2, "Phar-based phar archives", "enabled");
php_info_print_table_row(2, "Tar-based phar archives", "enabled");
php_info_print_table_row(2, "ZIP-based phar archives", "enabled");
http://cvs.php.net/viewvc.cgi/php-src/ext/phar/tests/zip/unixzip.phpt?r1=1.2&r2=1.2.2.1&diff_format=u
Index: php-src/ext/phar/tests/zip/unixzip.phpt
diff -u php-src/ext/phar/tests/zip/unixzip.phpt:1.2 php-src/ext/phar/tests/zip/unixzip.phpt:1.2.2.1
--- php-src/ext/phar/tests/zip/unixzip.phpt:1.2 Sun Apr 20 05:50:39 2008
+++ php-src/ext/phar/tests/zip/unixzip.phpt Thu May 29 17:34:50 2008
@@ -10,7 +10,8 @@
if ($b->isDir()) {
echo "dir " . $b->getPathName() . "\n";
} else {
- echo $b->getPathName() . "\n";
+ echo $b->getPathName(), "\n";
+ echo file_get_contents($b->getPathName()), "\n";
}
}
if (isset($a['notempty/hi.txt'])) {
@@ -19,8 +20,10 @@
?>
===DONE===
--EXPECTF--
-dir phar://%szip.zip%cempty
-phar://%szip.zip%chi.txt
-dir phar://%szip.zip%cnotempty
-phar://%szip.zip/notempty/hi.txt
-===DONE===
+dir phar:///home/cellog/workspace/php5/ext/phar/tests/zip/files/zip.zip/empty
+phar:///home/cellog/workspace/php5/ext/phar/tests/zip/files/zip.zip/hi.txt
+hi there
+
+dir phar:///home/cellog/workspace/php5/ext/phar/tests/zip/files/zip.zip/notempty
+phar:///home/cellog/workspace/php5/ext/phar/tests/zip/files/zip.zip/notempty/hi.txt
+===DONE===
\ No newline at end of file