bjori                                    Mon, 29 Aug 2011 16:05:45 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=315713

Log:
Fixed bug#53872 (internal corruption of phar)

Bug: https://bugs.php.net/53872 (Open) internal corruption of phar
      
Changed paths:
    U   php/php-src/branches/PHP_5_3/NEWS
    A   php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872/
    A   php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872/first.txt
    A   php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872/second.txt
    A   php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872/third.txt
    A   php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872.phpt
    U   php/php-src/branches/PHP_5_3/ext/phar/util.c
    A   php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872/
    A   php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872/first.txt
    A   php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872/second.txt
    A   php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872/third.txt
    A   php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872.phpt
    U   php/php-src/branches/PHP_5_4/ext/phar/util.c
    A   php/php-src/trunk/ext/phar/tests/bug53872/
    A   php/php-src/trunk/ext/phar/tests/bug53872/first.txt
    A   php/php-src/trunk/ext/phar/tests/bug53872/second.txt
    A   php/php-src/trunk/ext/phar/tests/bug53872/third.txt
    A   php/php-src/trunk/ext/phar/tests/bug53872.phpt
    U   php/php-src/trunk/ext/phar/util.c

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS	2011-08-29 15:53:46 UTC (rev 315712)
+++ php/php-src/branches/PHP_5_3/NEWS	2011-08-29 16:05:45 UTC (rev 315713)
@@ -8,6 +8,7 @@

 - Phar:
   . Fixed bug#52013 (Unable to decompress files in a compressed phar). (Hannes)
+  . Fixed bug#53872 (internal corruption of phar). (Hannes)

 - NSAPI SAPI:
   . Don't set $_SERVER['HTTPS'] on unsecure connection (bug #55403). (Uwe

Added: php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872/first.txt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872/first.txt	                        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872/first.txt	2011-08-29 16:05:45 UTC (rev 315713)
@@ -0,0 +1 @@
+content of first.txt

Added: php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872/second.txt
===================================================================
Added: php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872/third.txt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872/third.txt	                        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872/third.txt	2011-08-29 16:05:45 UTC (rev 315713)
@@ -0,0 +1 @@
+content of third.txt

Added: php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872.phpt	                        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/phar/tests/bug53872.phpt	2011-08-29 16:05:45 UTC (rev 315713)
@@ -0,0 +1,23 @@
+--TEST--
+bug#53872 (internal corruption of phar)
+--INI--
+phar.readonly=0
+--FILE--
+<?php
+$p=new Phar('bug53872-phar.phar');
+$p->buildFromDirectory(__DIR__ . "/bug53872/");
+$p->setStub('<?php __HALT_COMPILER();?\>');
+$p->compressFiles(Phar::GZ);
+
+print(file_get_contents('phar://bug53872-phar.phar/first.txt'));
+print(file_get_contents('phar://bug53872-phar.phar/second.txt'));
+print(file_get_contents('phar://bug53872-phar.phar/third.txt'));
+?>
+--CLEAN--
+<?php
+unlink("bug53872-phar.phar");
+?>
+--EXPECT--
+content of first.txt
+content of third.txt
+

Modified: php/php-src/branches/PHP_5_3/ext/phar/util.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/phar/util.c	2011-08-29 15:53:46 UTC (rev 315712)
+++ php/php-src/branches/PHP_5_3/ext/phar/util.c	2011-08-29 16:05:45 UTC (rev 315713)
@@ -1000,10 +1000,12 @@
 	php_stream_filter_append(&ufp->writefilters, filter);
 	php_stream_seek(phar_get_entrypfp(entry TSRMLS_CC), phar_get_fp_offset(entry TSRMLS_CC), SEEK_SET);

-	if (SUCCESS != phar_stream_copy_to_stream(phar_get_entrypfp(entry TSRMLS_CC), ufp, entry->compressed_filesize, NULL)) {
-		spprintf(error, 4096, "phar error: internal corruption of phar \"%s\" (actual filesize mismatch on file \"%s\")", phar->fname, entry->filename);
-		php_stream_filter_remove(filter, 1 TSRMLS_CC);
-		return FAILURE;
+	if (entry->uncompressed_filesize) {
+		if (SUCCESS != phar_stream_copy_to_stream(phar_get_entrypfp(entry TSRMLS_CC), ufp, entry->compressed_filesize, NULL)) {
+			spprintf(error, 4096, "phar error: internal corruption of phar \"%s\" (actual filesize mismatch on file \"%s\")", phar->fname, entry->filename);
+			php_stream_filter_remove(filter, 1 TSRMLS_CC);
+			return FAILURE;
+		}
 	}

 	php_stream_filter_flush(filter, 1);

Added: php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872/first.txt
===================================================================
--- php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872/first.txt	                        (rev 0)
+++ php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872/first.txt	2011-08-29 16:05:45 UTC (rev 315713)
@@ -0,0 +1 @@
+content of first.txt

Added: php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872/second.txt
===================================================================
Added: php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872/third.txt
===================================================================
--- php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872/third.txt	                        (rev 0)
+++ php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872/third.txt	2011-08-29 16:05:45 UTC (rev 315713)
@@ -0,0 +1 @@
+content of third.txt

Added: php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872.phpt
===================================================================
--- php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872.phpt	                        (rev 0)
+++ php/php-src/branches/PHP_5_4/ext/phar/tests/bug53872.phpt	2011-08-29 16:05:45 UTC (rev 315713)
@@ -0,0 +1,23 @@
+--TEST--
+bug#53872 (internal corruption of phar)
+--INI--
+phar.readonly=0
+--FILE--
+<?php
+$p=new Phar('bug53872-phar.phar');
+$p->buildFromDirectory(__DIR__ . "/bug53872/");
+$p->setStub('<?php __HALT_COMPILER();?\>');
+$p->compressFiles(Phar::GZ);
+
+print(file_get_contents('phar://bug53872-phar.phar/first.txt'));
+print(file_get_contents('phar://bug53872-phar.phar/second.txt'));
+print(file_get_contents('phar://bug53872-phar.phar/third.txt'));
+?>
+--CLEAN--
+<?php
+unlink("bug53872-phar.phar");
+?>
+--EXPECT--
+content of first.txt
+content of third.txt
+

Modified: php/php-src/branches/PHP_5_4/ext/phar/util.c
===================================================================
--- php/php-src/branches/PHP_5_4/ext/phar/util.c	2011-08-29 15:53:46 UTC (rev 315712)
+++ php/php-src/branches/PHP_5_4/ext/phar/util.c	2011-08-29 16:05:45 UTC (rev 315713)
@@ -999,10 +999,12 @@
 	php_stream_filter_append(&ufp->writefilters, filter);
 	php_stream_seek(phar_get_entrypfp(entry TSRMLS_CC), phar_get_fp_offset(entry TSRMLS_CC), SEEK_SET);

-	if (SUCCESS != phar_stream_copy_to_stream(phar_get_entrypfp(entry TSRMLS_CC), ufp, entry->compressed_filesize, NULL)) {
-		spprintf(error, 4096, "phar error: internal corruption of phar \"%s\" (actual filesize mismatch on file \"%s\")", phar->fname, entry->filename);
-		php_stream_filter_remove(filter, 1 TSRMLS_CC);
-		return FAILURE;
+	if (entry->uncompressed_filesize) {
+		if (SUCCESS != phar_stream_copy_to_stream(phar_get_entrypfp(entry TSRMLS_CC), ufp, entry->compressed_filesize, NULL)) {
+			spprintf(error, 4096, "phar error: internal corruption of phar \"%s\" (actual filesize mismatch on file \"%s\")", phar->fname, entry->filename);
+			php_stream_filter_remove(filter, 1 TSRMLS_CC);
+			return FAILURE;
+		}
 	}

 	php_stream_filter_flush(filter, 1);

Added: php/php-src/trunk/ext/phar/tests/bug53872/first.txt
===================================================================
--- php/php-src/trunk/ext/phar/tests/bug53872/first.txt	                        (rev 0)
+++ php/php-src/trunk/ext/phar/tests/bug53872/first.txt	2011-08-29 16:05:45 UTC (rev 315713)
@@ -0,0 +1 @@
+content of first.txt

Added: php/php-src/trunk/ext/phar/tests/bug53872/second.txt
===================================================================
Added: php/php-src/trunk/ext/phar/tests/bug53872/third.txt
===================================================================
--- php/php-src/trunk/ext/phar/tests/bug53872/third.txt	                        (rev 0)
+++ php/php-src/trunk/ext/phar/tests/bug53872/third.txt	2011-08-29 16:05:45 UTC (rev 315713)
@@ -0,0 +1 @@
+content of third.txt

Added: php/php-src/trunk/ext/phar/tests/bug53872.phpt
===================================================================
--- php/php-src/trunk/ext/phar/tests/bug53872.phpt	                        (rev 0)
+++ php/php-src/trunk/ext/phar/tests/bug53872.phpt	2011-08-29 16:05:45 UTC (rev 315713)
@@ -0,0 +1,23 @@
+--TEST--
+bug#53872 (internal corruption of phar)
+--INI--
+phar.readonly=0
+--FILE--
+<?php
+$p=new Phar('bug53872-phar.phar');
+$p->buildFromDirectory(__DIR__ . "/bug53872/");
+$p->setStub('<?php __HALT_COMPILER();?\>');
+$p->compressFiles(Phar::GZ);
+
+print(file_get_contents('phar://bug53872-phar.phar/first.txt'));
+print(file_get_contents('phar://bug53872-phar.phar/second.txt'));
+print(file_get_contents('phar://bug53872-phar.phar/third.txt'));
+?>
+--CLEAN--
+<?php
+unlink("bug53872-phar.phar");
+?>
+--EXPECT--
+content of first.txt
+content of third.txt
+

Modified: php/php-src/trunk/ext/phar/util.c
===================================================================
--- php/php-src/trunk/ext/phar/util.c	2011-08-29 15:53:46 UTC (rev 315712)
+++ php/php-src/trunk/ext/phar/util.c	2011-08-29 16:05:45 UTC (rev 315713)
@@ -999,10 +999,12 @@
 	php_stream_filter_append(&ufp->writefilters, filter);
 	php_stream_seek(phar_get_entrypfp(entry TSRMLS_CC), phar_get_fp_offset(entry TSRMLS_CC), SEEK_SET);

-	if (SUCCESS != phar_stream_copy_to_stream(phar_get_entrypfp(entry TSRMLS_CC), ufp, entry->compressed_filesize, NULL)) {
-		spprintf(error, 4096, "phar error: internal corruption of phar \"%s\" (actual filesize mismatch on file \"%s\")", phar->fname, entry->filename);
-		php_stream_filter_remove(filter, 1 TSRMLS_CC);
-		return FAILURE;
+	if (entry->uncompressed_filesize) {
+		if (SUCCESS != phar_stream_copy_to_stream(phar_get_entrypfp(entry TSRMLS_CC), ufp, entry->compressed_filesize, NULL)) {
+			spprintf(error, 4096, "phar error: internal corruption of phar \"%s\" (actual filesize mismatch on file \"%s\")", phar->fname, entry->filename);
+			php_stream_filter_remove(filter, 1 TSRMLS_CC);
+			return FAILURE;
+		}
 	}

 	php_stream_filter_flush(filter, 1);
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to