Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions ext/phar/func_interceptors.c
Original file line number Diff line number Diff line change
Expand Up @@ -932,6 +932,7 @@ void phar_intercept_functions_shutdown(void)
PHAR_RELEASE(fopen);
PHAR_RELEASE(file_get_contents);
PHAR_RELEASE(is_file);
PHAR_RELEASE(is_link);
PHAR_RELEASE(is_dir);
PHAR_RELEASE(opendir);
PHAR_RELEASE(file_exists);
Expand Down
30 changes: 30 additions & 0 deletions ext/phar/tests/phar-is-link-intercept.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
--TEST--
phar: is_link() intercept correctly delegates for non-symlink phar entries
--EXTENSIONS--
phar
--SKIPIF--
<?php if (defined('PHP_WINDOWS_VERSION_MAJOR')) die("skip"); ?>
--INI--
phar.readonly=0
phar.require_hash=0
--FILE--
<?php
$fname = __DIR__ . '/' . basename(__FILE__, '.php') . '.phar';
$phar = new Phar($fname);
$phar->addFromString('file.txt', 'hello');
$phar->setStub('<?php
Phar::interceptFileFuncs();
// relative path resolves via phar intercept
var_dump(is_link("file.txt")); // false: regular entry, not a symlink
var_dump(is_link("nonexistent.txt")); // false: missing entry
// absolute phar:// path bypasses the relative-path intercept, goes to orig_is_link
var_dump(is_link("phar://" . __FILE__ . "/file.txt")); // false: phar entries are never OS symlinks
__HALT_COMPILER(); ?>');
include $fname;
?>
--CLEAN--
<?php @unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar'); ?>
--EXPECT--
bool(false)
bool(false)
bool(false)
Loading