mirror of
https://github.com/php/php-src.git
synced 2024-09-22 10:27:25 +00:00
fix basic phar test issues, failing tests phar_oo_009.phpt and phar_buildfromiterator10.phpt are due to bugs in Spl
This commit is contained in:
parent
732f4af082
commit
66908185b7
@ -207,18 +207,30 @@ static php_stream * phar_wrapper_open_url(php_stream_wrapper *wrapper, char *pat
|
||||
fpf = php_stream_alloc(&phar_ops, idata, NULL, mode);
|
||||
php_url_free(resource);
|
||||
efree(internal_file);
|
||||
#if PHP_MAJOR_VERSION >= 6
|
||||
if (context && context->options && phar_find_key(HASH_OF(context->options), "phar", sizeof("phar"), (void**)&pzoption TSRMLS_CC)) {
|
||||
#else
|
||||
if (context && context->options && zend_hash_find(HASH_OF(context->options), "phar", sizeof("phar"), (void**)&pzoption) == SUCCESS) {
|
||||
#endif
|
||||
pharcontext = HASH_OF(*pzoption);
|
||||
if (idata->internal_file->uncompressed_filesize == 0
|
||||
&& idata->internal_file->compressed_filesize == 0
|
||||
#if PHP_MAJOR_VERSION >= 6
|
||||
&& phar_find_key(pharcontext, "compress", sizeof("compress"), (void**)&pzoption TSRMLS_CC)
|
||||
#else
|
||||
&& zend_hash_find(pharcontext, "compress", sizeof("compress"), (void**)&pzoption) == SUCCESS
|
||||
#endif
|
||||
&& Z_TYPE_PP(pzoption) == IS_LONG
|
||||
&& (Z_LVAL_PP(pzoption) & ~PHAR_ENT_COMPRESSION_MASK) == 0
|
||||
) {
|
||||
idata->internal_file->flags &= ~PHAR_ENT_COMPRESSION_MASK;
|
||||
idata->internal_file->flags |= Z_LVAL_PP(pzoption);
|
||||
}
|
||||
#if PHP_MAJOR_VERSION >= 6
|
||||
if (phar_find_key(pharcontext, "metadata", sizeof("metadata"), (void**)&pzoption TSRMLS_CC)) {
|
||||
#else
|
||||
if (zend_hash_find(pharcontext, "metadata", sizeof("metadata"), (void**)&pzoption) == SUCCESS) {
|
||||
#endif
|
||||
if (idata->internal_file->metadata) {
|
||||
zval_ptr_dtor(&idata->internal_file->metadata);
|
||||
idata->internal_file->metadata = NULL;
|
||||
|
@ -27,9 +27,9 @@ file_put_contents($pname .'/b.php', "another!\n");
|
||||
$phar = new Phar($fname);
|
||||
$sig2 = $phar->getSignature();
|
||||
|
||||
var_dump($sig1['hash']);
|
||||
var_dump($sig2['hash']);
|
||||
var_dump($sig1['hash'] != $sig2['hash']);
|
||||
var_dump($sig1[b'hash']);
|
||||
var_dump($sig2[b'hash']);
|
||||
var_dump($sig1[b'hash'] != $sig2[b'hash']);
|
||||
|
||||
include $pname . '/a.php';
|
||||
include $pname . '/b.php';
|
||||
|
@ -28,7 +28,7 @@ var_dump($phar['b']->isCompressed());
|
||||
var_dump(file_get_contents($pname . '/c'));
|
||||
var_dump($phar['c']->isCompressed());
|
||||
|
||||
$context = stream_context_create(array('phar'=> array('compress'=>Phar::GZ, 'metadata' => array(2, 'hi' => 3))));
|
||||
$context = stream_context_create(array('phar'=> array('compress'=>Phar::GZ, 'metadata' => array(2, b'hi' => 3))));
|
||||
$context2 = stream_context_create(array('phar' => array('metadata' => array(4))));
|
||||
|
||||
file_put_contents($pname . '/a', b'new a', 0); // no compression
|
||||
|
@ -2,6 +2,7 @@
|
||||
Phar: test edge cases of readfile() function interception
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) die("skip");?>
|
||||
<?php if (version_compare(PHP_VERSION, "6.0", ">=")) die("skip requires php older than 6.0"); ?>
|
||||
--INI--
|
||||
phar.readonly=0
|
||||
--FILE--
|
||||
|
61
ext/phar/tests/readfile_edgecasesU.phpt
Normal file
61
ext/phar/tests/readfile_edgecasesU.phpt
Normal file
@ -0,0 +1,61 @@
|
||||
--TEST--
|
||||
Phar: test edge cases of readfile() function interception
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("phar")) die("skip");?>
|
||||
<?php if (version_compare(PHP_VERSION, "6.0", "<")) die("skip requires php 6.0 or newer"); ?>
|
||||
--INI--
|
||||
phar.readonly=0
|
||||
--FILE--
|
||||
<?php
|
||||
Phar::interceptFileFuncs();
|
||||
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
|
||||
$pname = 'phar://' . $fname;
|
||||
|
||||
chdir(dirname(__FILE__));
|
||||
file_put_contents($fname, "blah\n");
|
||||
file_put_contents("foob", "test\n");
|
||||
readfile($fname);
|
||||
unlink($fname);
|
||||
mkdir($pname . '/oops');
|
||||
file_put_contents($pname . '/foo/hi', '<?php
|
||||
readfile("foo/" . basename(__FILE__));
|
||||
$context = stream_context_create();
|
||||
readfile("foob");
|
||||
set_include_path("' . addslashes(dirname(__FILE__)) . '");
|
||||
readfile("foob", true);
|
||||
readfile("./hi", 0, $context);
|
||||
readfile("../oops");
|
||||
?>
|
||||
');
|
||||
include $pname . '/foo/hi';
|
||||
?>
|
||||
===DONE===
|
||||
--CLEAN--
|
||||
<?php unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
|
||||
<?php rmdir(dirname(__FILE__) . '/poo'); ?>
|
||||
<?php unlink(dirname(__FILE__) . '/foob'); ?>
|
||||
--EXPECTF--
|
||||
blah
|
||||
<?php
|
||||
readfile("foo/" . basename(__FILE__));
|
||||
$context = stream_context_create();
|
||||
readfile("foob");
|
||||
set_include_path("%stests");
|
||||
readfile("foob", true);
|
||||
readfile("./hi", 0, $context);
|
||||
readfile("../oops");
|
||||
?>
|
||||
test
|
||||
test
|
||||
<?php
|
||||
readfile("foo/" . basename(__FILE__));
|
||||
$context = stream_context_create();
|
||||
readfile("foob");
|
||||
set_include_path("%stests");
|
||||
readfile("foob", true);
|
||||
readfile("./hi", 0, $context);
|
||||
readfile("../oops");
|
||||
?>
|
||||
|
||||
Warning: readfile(phar://%sreadfile_edgecasesU.phar.php/oops): failed to open stream: phar error: path "oops" is a directory in phar://%sreadfile_edgecasesU.phar.php/foo/hi on line %d
|
||||
===DONE===
|
Loading…
Reference in New Issue
Block a user