fix segfault, add separate tar test for readonly=0 on corrupted tar

This commit is contained in:
Greg Beaver 2008-01-05 23:02:23 +00:00
parent bd0d9e8de3
commit 632a633154
3 changed files with 38 additions and 9 deletions

View 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) {

View 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===

View File

@ -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===