]> granicus.if.org Git - php/commitdiff
fix segfault, add separate tar test for readonly=0 on corrupted tar
authorGreg Beaver <cellog@php.net>
Sat, 5 Jan 2008 23:02:23 +0000 (23:02 +0000)
committerGreg Beaver <cellog@php.net>
Sat, 5 Jan 2008 23:02:23 +0000 (23:02 +0000)
ext/phar/phar.c
ext/phar/tests/tar/tar_001.phpt
ext/phar/tests/tar/tar_002.phpt [new file with mode: 0644]

index ea04444113259837051bfd9c2213675f65aee10f..da2b861bc6559ce63504d0d36419df98ab9286ac 100644 (file)
@@ -1796,9 +1796,9 @@ int phar_create_or_parse_filename(char *fname, int fname_len, char *alias, int a
                        php_stream_close(fp);
                        return FAILURE;
                }
+               php_stream_close(fp);
        }
 
-       php_stream_close(fp);
 
        if (PHAR_G(readonly)) {
                if (options & REPORT_ERRORS) {
@@ -1890,7 +1890,7 @@ int phar_open_filename(char *fname, int fname_len, char *alias, int alias_len, i
                return FAILURE;
        }
 
-       fp = php_stream_open_wrapper(fname, "rb", IGNORE_URL|STREAM_MUST_SEEK|REPORT_ERRORS, NULL);
+       fp = php_stream_open_wrapper(fname, "rb", IGNORE_URL|STREAM_MUST_SEEK, NULL);
        
        if (!fp) {
                if (options & REPORT_ERRORS) {
index 4e888c0d0253201c18299564b7c36b4aad21e2c7..af15609119ecdc55cd3aea67f04760c7a2178f8a 100644 (file)
@@ -3,9 +3,6 @@ Phar: tar-based phar corrupted
 --SKIPIF--
 <?php if (!extension_loaded('phar')) die('skip'); ?>
 <?php if (!extension_loaded("spl")) die("skip SPL not available"); ?>
---INI--
-phar.readonly=0
-phar.require_hash=0
 --FILE--
 <?php
 include dirname(__FILE__) . '/make_invalid_tar.php.inc';
@@ -14,9 +11,9 @@ $a->init();
 $a->addFile('tar_001.phpt', __FILE__);
 $a->close();
 
-$a = fopen('phar://tar_001.phar/tar_001.phpt', 'rb');
+$a = fopen('phar://' . dirname(__FILE__) . '/tar_001.phar/tar_001.phpt', 'rb');
 try {
-$a = new Phar('tar_001.phar');
+$a = new Phar(dirname(__FILE__) . '/tar_001.phar');
 echo "should not execute\n";
 } catch (Exception $e) {
 echo $e->getMessage() . "\n";
@@ -28,6 +25,6 @@ echo $e->getMessage() . "\n";
 @unlink(dirname(__FILE__) . '/tar_001.phar');
 ?>
 --EXPECTF--
-Warning: fopen(phar://tar_001.phar/tar_001.phpt): failed to open stream: phar error: "tar_001.phar" is a corrupted tar file in %s/tar_001.php on line %d
-Cannot open phar file 'tar_001.phar' with alias '(null)': phar error: "tar_001.phar" is a corrupted tar file
+Warning: fopen(phar://%s/tar_001.phar/tar_001.phpt): failed to open stream: phar error: "%s/tar_001.phar" is a corrupted tar file in %s/tar_001.php on line %d
+Cannot open phar file '%s/tar_001.phar' with alias '(null)': phar error: "%s/tar_001.phar" is a corrupted tar file
 ===DONE===
\ No newline at end of file
diff --git a/ext/phar/tests/tar/tar_002.phpt b/ext/phar/tests/tar/tar_002.phpt
new file mode 100644 (file)
index 0000000..f815dbf
--- /dev/null
@@ -0,0 +1,32 @@
+--TEST--
+Phar: tar-based phar corrupted 2
+--SKIPIF--
+<?php if (!extension_loaded('phar')) die('skip'); ?>
+<?php if (!extension_loaded("spl")) die("skip SPL not available"); ?>
+--INI--
+phar.readonly=0
+--FILE--
+<?php
+include dirname(__FILE__) . '/make_invalid_tar.php.inc';
+$a = new corrupter(dirname(__FILE__) . '/tar_002.phar', 'none');
+$a->init();
+$a->addFile('tar_002.phpt', __FILE__);
+$a->close();
+
+$a = fopen('phar://' . dirname(__FILE__) . '/tar_002.phar/tar_002.phpt', 'rb');
+try {
+$a = new Phar(dirname(__FILE__) . '/tar_002.phar');
+echo "should not execute\n";
+} catch (Exception $e) {
+echo $e->getMessage() . "\n";
+}
+?>
+===DONE===
+--CLEAN--
+<?php
+@unlink(dirname(__FILE__) . '/tar_002.phar');
+?>
+--EXPECTF--
+Warning: fopen(phar://%s/tar_002.phar/tar_002.phpt): failed to open stream: phar error: "%s/tar_002.phar" is a corrupted tar file in %s/tar_002.php on line %d
+Cannot open phar file '%s/tar_002.phar' with alias '(null)': phar error: "%s/tar_002.phar" is a corrupted tar file
+===DONE===
\ No newline at end of file