]> granicus.if.org Git - php/commitdiff
fp must be nulled on every write also when == phar->fp or we get stale fp and problem...
authorGreg Beaver <cellog@php.net>
Mon, 7 Jan 2008 17:58:31 +0000 (17:58 +0000)
committerGreg Beaver <cellog@php.net>
Mon, 7 Jan 2008 17:58:31 +0000 (17:58 +0000)
ext/phar/tar.c
ext/phar/tests/tar/phar_begin_setstub_commit.phpt [new file with mode: 0755]

index 5ce834dcd94ebddd6eeeffdb36c14e0253eab50c..9bd8d4f5f7f33b0547670c92dcfd4cc51cb8e50f 100644 (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 */
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 (executable)
index 0000000..383e23b
--- /dev/null
@@ -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===