]> granicus.if.org Git - php/commitdiff
Fix bug #69958 - Segfault in Phar::convertToData on invalid file
authorStanislav Malyshev <stas@php.net>
Sun, 5 Jul 2015 04:01:50 +0000 (21:01 -0700)
committerStanislav Malyshev <stas@php.net>
Tue, 7 Jul 2015 17:15:41 +0000 (10:15 -0700)
ext/phar/phar_object.c
ext/phar/tests/bug69958.phpt [new file with mode: 0644]
ext/phar/tests/bug69958.tar [new file with mode: 0644]

index 0c7f97105add5d36c85c2c5b6bcd6160cbe0d3ca..ebb15f047a3eb819a1950534f08bb3d57b08536a 100644 (file)
@@ -2296,7 +2296,9 @@ no_copy:
                zend_hash_destroy(&(phar->manifest));
                zend_hash_destroy(&(phar->mounted_dirs));
                zend_hash_destroy(&(phar->virtual_dirs));
-               php_stream_close(phar->fp);
+               if (phar->fp) {
+                       php_stream_close(phar->fp);
+               }
                efree(phar->fname);
                efree(phar);
                return NULL;
diff --git a/ext/phar/tests/bug69958.phpt b/ext/phar/tests/bug69958.phpt
new file mode 100644 (file)
index 0000000..d63b413
--- /dev/null
@@ -0,0 +1,14 @@
+--TEST--
+Phar: bug #69958: Segfault in Phar::convertToData on invalid file
+--SKIPIF--
+<?php if (!extension_loaded("phar")) die("skip"); ?>
+--FILE--
+<?php
+$tarphar = new PharData(__DIR__.'/bug69958.tar');
+$phar = $tarphar->convertToData(Phar::TAR); 
+--EXPECTF--
+Fatal error: Uncaught exception 'BadMethodCallException' with message 'phar "%s/bug69958.tar" exists and must be unlinked prior to conversion' in %s/bug69958.php:%d
+Stack trace:
+#0 %s/bug69958.php(%d): PharData->convertToData(%d)
+#1 {main}
+  thrown in %s/bug69958.php on line %d
diff --git a/ext/phar/tests/bug69958.tar b/ext/phar/tests/bug69958.tar
new file mode 100644 (file)
index 0000000..0227524
Binary files /dev/null and b/ext/phar/tests/bug69958.tar differ