static zend_op_array *phar_compile_file(zend_file_handle *file_handle, int type TSRMLS_DC) /* {{{ */
{
zend_op_array *res;
+ char *s, *name = NULL;
char *fname = NULL;
int fname_len;
zend_op_array *(*save)(zend_file_handle *file_handle, int type TSRMLS_DC);
}
fname_len = strlen(fname);
if (SUCCESS == phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len TSRMLS_CC)) {
- char *s, *name;
efree(entry);
entry = file_handle->filename;
}
skip_phar:
res = zend_compile_file(file_handle, type TSRMLS_CC);
+ if (name) {
+ efree(name);
+ }
zend_compile_file = save;
return res;
}
zend_hash_init(&(PHAR_GLOBALS->phar_alias_map), sizeof(phar_archive_data*), zend_get_hash_value, NULL, 0);
zend_hash_init(&(PHAR_GLOBALS->phar_plain_map), sizeof(const char *), zend_get_hash_value, NULL, 0);
phar_split_extract_list(TSRMLS_C);
- if (PHAR_G(orig_fopen) && SUCCESS == zend_hash_find(EG(function_table), "fopen", 5, (void **)&orig)) {
+ if (SUCCESS == zend_hash_find(CG(function_table), "fopen", 5, (void **)&orig)) {
PHAR_G(orig_fopen) = orig->internal_function.handler;
orig->internal_function.handler = phar_fopen;
}
- if (SUCCESS == zend_hash_find(EG(function_table), "getcwd", 5, (void **)&orig)) {
+ if (SUCCESS == zend_hash_find(CG(function_table), "getcwd", 5, (void **)&orig)) {
PHAR_G(orig_getcwd) = orig->internal_function.handler;
orig->internal_function.handler = phar_getcwd;
}
--TEST--
-Phar::setStub()
+Phar: include/getcwd/fopen magic
--SKIPIF--
<?php if (!extension_loaded("phar")) print "skip"; ?>
--INI--
<?php
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
$p = new Phar($fname);
-$p['a'] = '<?php include "b.php";';
+$p['a'] = '<?php include "b/c.php";' . "\n";
+$p['b/c.php'] = '<?php echo "in b\n";$a = fopen("a", "r", true);echo stream_get_contents($a);fclose($a);echo getcwd() . "\n";';
+$p->setStub('<?php
+include "phar://" . __FILE__ . "/a";
+__HALT_COMPILER();');
+include $fname;
?>
===DONE===
--CLEAN--
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar.php');
__HALT_COMPILER();
?>
---EXPECT--
+--EXPECTF--
+in b
+<?php include "b/c.php";
+phar://%s/b
===DONE===