From d9d91f424bffa0d57592d121518604d3d2dd39da Mon Sep 17 00:00:00 2001 From: Greg Beaver Date: Mon, 7 Jan 2008 17:58:31 +0000 Subject: [PATCH] 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 --- ext/phar/tar.c | 2 +- .../tests/tar/phar_begin_setstub_commit.phpt | 51 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100755 ext/phar/tests/tar/phar_begin_setstub_commit.phpt diff --git a/ext/phar/tar.c b/ext/phar/tar.c index 5ce834dcd9..9bd8d4f5f7 100644 --- a/ext/phar/tar.c +++ b/ext/phar/tar.c @@ -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 */ diff --git a/ext/phar/tests/tar/phar_begin_setstub_commit.phpt b/ext/phar/tests/tar/phar_begin_setstub_commit.phpt new file mode 100755 index 0000000000..383e23bb4f --- /dev/null +++ b/ext/phar/tests/tar/phar_begin_setstub_commit.phpt @@ -0,0 +1,51 @@ +--TEST-- +Phar::startBuffering()/setStub()/stopBuffering() tar-based +--SKIPIF-- + +--INI-- +phar.readonly=0 +--FILE-- +isTar()); +//var_dump($p->getStub()); +var_dump($p->isBuffering()); +$p->startBuffering(); +var_dump($p->isBuffering()); +$p['a.php'] = 'setStub(''); +include 'phar://brandnewphar.phar/a.php'; +var_dump($p->getStub()); +$p['b.php'] = 'setStub('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-- + +--EXPECT-- +bool(true) +bool(true) +bool(false) +string(5) "Hello" +string(84) " +" +string(5) "World" +string(85) " +" +===COMMIT=== +bool(true) +string(5) "Hello" +string(5) "World" +string(85) " +" +===DONE=== -- 2.50.1