Edit report at https://bugs.php.net/bug.php?id=65028&edit=1
ID: 65028 User updated by: matthias dot burtscher at fusonic dot net Reported by: matthias dot burtscher at fusonic dot net Summary: Phar::buildFromDirectory creates corrupt archives for some specific contents Status: Open Type: Bug Package: PHAR related -Operating System: Ubuntu 13.04 +Operating System: Ubuntu 13.04, Windows 7 -PHP Version: 5.5.0 +PHP Version: 5.3.x, 5.4.x, 5.5.x Block user comment: N Private report: N New Comment: I managed to recreate the issue and submitted a test case right here on GitHub: https://github.com/php/php-src/pull/371 Previous Comments: ------------------------------------------------------------------------ [2013-06-27 11:59:34] matthias dot burtscher at fusonic dot net Re-tested with the latest PHP 5.5.0 release, still not working. ------------------------------------------------------------------------ [2013-06-13 14:10:01] matthias dot burtscher at fusonic dot net This one will result in the same corrupt phar archive: $phar = new Phar("test.phar"); $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("/tmp/test/content", FilesystemIterator::SKIP_DOTS)); $phar->buildFromIterator($iterator, "/tmp/test/content"); $phar->compress(Phar::GZ); ------------------------------------------------------------------------ [2013-06-13 11:47:12] matthias dot burtscher at fusonic dot net Description: ------------ When creating a Phar archive with a very simple Phar::createFromDirectory() call (see test script) the generated archive is corrupt sometimes, depending on the contents packed into the Phar. I CAN PROVIDE THE TEST CONTENTS TO A DEVELOPER BUT NOT TO THE PUBLIC. Opening the Phar will cause a Fatal error. Adding an additional empty file (see test script) to the archive fixes the problem. Sometimes a second empty file has to be added, sometimes a third one. Tested PHP versions: - 5.3.26 - 5.4.16 - 5.5.0 RC3 Configure line (all versions): './configure' '--prefix=/opt/php/bin/php-5.3.26' '--with-gd' '--with-ldap=/usr' '--with-mysql' '--with-mssql' '--with-pdo-mysql' '--with-pdo-dblib' '--with-pdo-pgsql' '--with-pgsql' '--with-config-file-path=/opt/php/bin/php-5.3.26/etc' '--enable-mbstring' '--with-mcrypt' '--with-openssl' '--with-curl' '--with-zlib' '--with-libdir=lib/x86_64-linux-gnu' '--with-jpeg-dir' '--with-png-dir' Test script: --------------- // Corrupt $phar = new Phar("test.phar"); $phar->buildFromDirectory("content"); $phar->compress(Phar::GZ); // Working (only difference is adding the empty file) $phar = new Phar("test.phar"); $phar->buildFromDirectory("content"); $phar->addFromString("an-empty-file", ""); $phar->compress(Phar::GZ); Expected result: ---------------- Working phar archive which can be opened with "new Phar('test.phar')". Actual result: -------------- Fatal error: Uncaught exception 'UnexpectedValueException' with message 'internal corruption of phar "/tmp/test/test.phar" (truncated manifest at stub end)' ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=65028&edit=1