fp must be nulled on every write also when == phar->fp or we get stale fp and problems. add new test that unearthed this problem

This commit is contained in:
Greg Beaver 2008-01-07 17:58:31 +00:00
parent 4a59f700f1
commit d9d91f424b
2 changed files with 52 additions and 1 deletions

View File

@ -394,8 +394,8 @@ int phar_tar_writeheaders(void *pDest, void *argument TSRMLS_DC)
if (entry->fp && entry->fp_refcount == 0) {
if (entry->fp != entry->phar->fp) {
php_stream_close(entry->fp);
entry->fp = NULL;
}
entry->fp = NULL;
}
/* note new location within tar */

View File

@ -0,0 +1,51 @@
--TEST--
Phar::startBuffering()/setStub()/stopBuffering() tar-based
--SKIPIF--
<?php if (!extension_loaded("phar")) die("skip"); ?>
--INI--
phar.readonly=0
--FILE--
<?php
$p = new Phar(dirname(__FILE__) . '/brandnewphar.phar.tar', 0, 'brandnewphar.phar');
var_dump($p->isTar());
//var_dump($p->getStub());
var_dump($p->isBuffering());
$p->startBuffering();
var_dump($p->isBuffering());
$p['a.php'] = '<?php var_dump("Hello");';
$p->setStub('<?php var_dump("First"); Phar::mapPhar("brandnewphar.phar"); __HALT_COMPILER(); ?>');
include 'phar://brandnewphar.phar/a.php';
var_dump($p->getStub());
$p['b.php'] = '<?php var_dump("World");';
$p->setStub('<?php var_dump("Second"); Phar::mapPhar("brandnewphar.phar"); __HALT_COMPILER();');
include 'phar://brandnewphar.phar/b.php';
var_dump($p->getStub());
$p->stopBuffering();
echo "===COMMIT===\n";
var_dump($p->isBuffering());
include 'phar://brandnewphar.phar/a.php';
include 'phar://brandnewphar.phar/b.php';
var_dump($p->getStub());
?>
===DONE===
--CLEAN--
<?php
unlink(dirname(__FILE__) . '/brandnewphar.phar.tar');
?>
--EXPECT--
bool(true)
bool(true)
bool(false)
string(5) "Hello"
string(84) "<?php var_dump("First"); Phar::mapPhar("brandnewphar.phar"); __HALT_COMPILER(); ?>
"
string(5) "World"
string(85) "<?php var_dump("Second"); Phar::mapPhar("brandnewphar.phar"); __HALT_COMPILER(); ?>
"
===COMMIT===
bool(true)
string(5) "Hello"
string(5) "World"
string(85) "<?php var_dump("Second"); Phar::mapPhar("brandnewphar.phar"); __HALT_COMPILER(); ?>
"
===DONE===