mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00

Currently we treat paths with null bytes as a TypeError, which is incorrect, and rather inconsistent, as we treat empty paths as ValueError. We do this because the error is generated by zpp and it's easier to always throw TypeError there. This changes the zpp implementation to throw a TypeError only if the type is actually wrong and throw ValueError for null bytes. The error message is also split accordingly, to be more precise. Closes GH-6094.
55 lines
1.3 KiB
PHP
55 lines
1.3 KiB
PHP
--TEST--
|
|
Phar: PharFileInfo::__construct
|
|
--SKIPIF--
|
|
<?php if (!extension_loaded("phar")) die("skip"); ?>
|
|
--INI--
|
|
phar.readonly=0
|
|
--FILE--
|
|
<?php
|
|
$fname = __DIR__ . '/' . basename(__FILE__, '.php') . '.phar';
|
|
$pname = 'phar://' . $fname;
|
|
|
|
try {
|
|
file_put_contents($fname, 'blah');
|
|
$a = new PharFileInfo($pname . '/oops');
|
|
} catch (Exception $e) {
|
|
echo $e->getMessage() . "\n";
|
|
unlink($fname);
|
|
}
|
|
|
|
try {
|
|
$a = new PharFileInfo(array());
|
|
} catch (TypeError $e) {
|
|
echo $e->getMessage() . "\n";
|
|
}
|
|
|
|
$a = new Phar($fname);
|
|
$a['a'] = 'hi';
|
|
$b = $a['a'];
|
|
|
|
try {
|
|
$a = new PharFileInfo($pname . '/oops/I/do/not/exist');
|
|
} catch (Exception $e) {
|
|
echo $e->getMessage() . "\n";
|
|
}
|
|
|
|
try {
|
|
$b->__construct('oops');
|
|
} catch (Exception $e) {
|
|
echo $e->getMessage() . "\n";
|
|
}
|
|
|
|
try {
|
|
$a = new PharFileInfo(__FILE__);
|
|
} catch (Exception $e) {
|
|
echo $e->getMessage() . "\n";
|
|
}
|
|
?>
|
|
--CLEAN--
|
|
<?php unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar'); ?>
|
|
--EXPECTF--
|
|
Cannot open phar file 'phar://%spharfileinfo_construct.phar/oops': internal corruption of phar "%spharfileinfo_construct.phar" (truncated entry)
|
|
PharFileInfo::__construct(): Argument #1 ($filename) must be of type string, array given
|
|
Cannot access phar file entry '%s' in archive '%s'
|
|
Cannot call constructor twice
|
|
'%s' is not a valid phar archive URL (must have at least phar://filename.phar)
|