1--TEST--
2Phar: create with illegal path
3--SKIPIF--
4<?php if (!extension_loaded("phar")) die("skip"); ?>
5--INI--
6phar.readonly=0
7phar.require_hash=1
8--FILE--
9<?php
10
11$fname = __DIR__ . '/' . basename(__FILE__, '.php') . '.phar.php';
12$pname = 'phar://' . $fname;
13
14@unlink($fname);
15
16file_put_contents($pname . '/a.php?', "query");
17file_put_contents($pname . '/b.php?bla', "query");
18
19var_dump(file_get_contents($pname . '/a.php'));
20var_dump(file_get_contents($pname . '/b.php'));
21
22function error_handler($errno, $errmsg)
23{
24	echo "Error: $errmsg";
25}
26
27set_error_handler('error_handler');
28
29$count = 0;
30$checks = array(
31    '/', '.', '../', 'a/..', 'a/', 'b//a.php',
32    "Font\xE5\x84\xB7\xE9\xBB\x91pro.ttf", //two valid multi-byte characters
33    "\xF0\x9F\x98\x8D.ttf", // valid 4 byte char - smiling face with heart-shaped eyes
34    "Font\xE9\xBBpro.ttf", //Invalid multi-byte character - missing last byte
35    "Font\xBB\x91pro.ttf",   //Invalid multi-byte character - missing first byte
36    "Font\xC0\xAFpro.ttf",   //Invalid multi-byte character - invalid first byte
37    "Font\xF0\x80\x90\x90pro.ttf",   //Invalid multi-byte character - surrogate pair code point
38    "\xFC\x81\x81\x81\x81pro.ttf", //RFC 3629 limited char points to 0000-10FFFF aka 5 byte utf-8 not valid
39);
40foreach($checks as $check)
41{
42	$count++;
43	echo "$count:";
44	file_put_contents($pname . '/' . $check, "error");
45	echo "\n";
46}
47
48$phar = new Phar($fname);
49$checks = array("a\0");
50foreach($checks as $check)
51{
52	try
53	{
54		$phar[$check] = 'error';
55	}
56	catch(Exception $e)
57	{
58		echo 'Exception: ' . $e->getMessage() . "\n";
59	}
60}
61
62?>
63===DONE===
64--CLEAN--
65<?php unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
66--EXPECTF--
67string(5) "query"
68string(5) "query"
691:Error: file_put_contents(phar://%s//): failed to open stream: phar error: file "" in phar "%s" cannot be empty
702:Error: file_put_contents(phar://%s/.): failed to open stream: phar error: file "" in phar "%s" cannot be empty
713:Error: file_put_contents(phar://%s/../): failed to open stream: phar error: file "" in phar "%s" cannot be empty
724:Error: file_put_contents(phar://%s/a/..): failed to open stream: phar error: file "" in phar "%s" cannot be empty
735:
746:
757:
768:
779:Error: file_put_contents(phar://%s): failed to open stream: phar error: invalid path "%s" contains illegal character
7810:Error: file_put_contents(phar://%s): failed to open stream: phar error: invalid path "%s" contains illegal character
7911:Error: file_put_contents(phar://%s): failed to open stream: phar error: invalid path "%s" contains illegal character
8012:Error: file_put_contents(phar://%s): failed to open stream: phar error: invalid path "%s" contains illegal character
8113:Error: file_put_contents(phar://%s): failed to open stream: phar error: invalid path "%s" contains illegal character
82Error: Phar::offsetSet() expects parameter 1 to be a valid path, string given===DONE===
83