Skip to content

Commit 3ec9d9f

Browse files
committed
Merge branch 'PHP-5.6'
* PHP-5.6: BFN Fixed bug #64931
2 parents 8994a5e + b7389f0 commit 3ec9d9f

File tree

3 files changed

+62
-1
lines changed

3 files changed

+62
-1
lines changed

ext/phar/phar_object.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3579,7 +3579,7 @@ static void phar_add_file(phar_archive_data **pphar, char *filename, int filenam
35793579
phar_entry_data *data;
35803580
php_stream *contents_file;
35813581

3582-
if (filename_len >= sizeof(".phar")-1 && !memcmp(filename, ".phar", sizeof(".phar")-1)) {
3582+
if (filename_len >= sizeof(".phar")-1 && !memcmp(filename, ".phar", sizeof(".phar")-1) && (filename[5] == '/' || filename[5] == '\\' || filename[5] == '\0')) {
35833583
zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "Cannot create any files in magic \".phar\" directory", (*pphar)->fname);
35843584
return;
35853585
}

ext/phar/tests/bug64931/bug64931.phpt

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
--TEST--
2+
Bug #64931 (phar_add_file is too restrictive on filename)
3+
--SKIPIF--
4+
<?php extension_loaded("phar") or die("skip need ext/phar support"); ?>
5+
--INI--
6+
phar.readonly=0
7+
--FILE--
8+
<?php
9+
10+
echo "Test\n";
11+
12+
@unlink(__DIR__."/bug64931.phar");
13+
$phar = new Phar(__DIR__."/bug64931.phar");
14+
$phar->addFile(__DIR__."/src/.pharignore", ".pharignore");
15+
try {
16+
$phar->addFile(__DIR__."/src/.pharignore", ".phar/gotcha");
17+
} catch (Exception $e) {
18+
echo "CAUGHT: ". $e->getMessage() ."\n";
19+
}
20+
21+
try {
22+
$phar->addFromString(".phar", "gotcha");
23+
} catch (Exception $e) {
24+
echo "CAUGHT: ". $e->getMessage() ."\n";
25+
}
26+
27+
try {
28+
$phar->addFromString(".phar//", "gotcha");
29+
} catch (Exception $e) {
30+
echo "CAUGHT: ". $e->getMessage() ."\n";
31+
}
32+
33+
try {
34+
$phar->addFromString(".phar\\", "gotcha");
35+
} catch (Exception $e) {
36+
echo "CAUGHT: ". $e->getMessage() ."\n";
37+
}
38+
39+
try {
40+
$phar->addFromString(".phar\0", "gotcha");
41+
} catch (Exception $e) {
42+
echo "CAUGHT: ". $e->getMessage() ."\n";
43+
}
44+
45+
?>
46+
===DONE===
47+
--CLEAN--
48+
<?php
49+
@unlink(__DIR__."/bug64931.phar");
50+
?>
51+
--EXPECT--
52+
Test
53+
CAUGHT: Cannot create any files in magic ".phar" directory
54+
CAUGHT: Cannot create any files in magic ".phar" directory
55+
CAUGHT: Cannot create any files in magic ".phar" directory
56+
CAUGHT: Cannot create any files in magic ".phar" directory
57+
CAUGHT: Cannot create any files in magic ".phar" directory
58+
===DONE===
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# ignore file
2+
*.tmp
3+
*~

0 commit comments

Comments
 (0)