Skip to content

Commit 32ef9ea

Browse files
authored
Merge pull request #46 from ashnazg/mkdir-perms
use 775 default for mkdirs, to avoid world-write
2 parents abc967f + 30f5bf7 commit 32ef9ea

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

Archive/Tar.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -2115,7 +2115,7 @@ public function _extractList(
21152115
if ($v_extract_file) {
21162116
if ($v_header['typeflag'] == "5") {
21172117
if (!@file_exists($v_header['filename'])) {
2118-
if (!@mkdir($v_header['filename'], 0777)) {
2118+
if (!@mkdir($v_header['filename'], 0775)) {
21192119
$this->_error(
21202120
'Unable to create directory {'
21212121
. $v_header['filename'] . '}'
@@ -2448,7 +2448,7 @@ public function _dirCheck($p_dir)
24482448
return false;
24492449
}
24502450

2451-
if (!@mkdir($p_dir, 0777)) {
2451+
if (!@mkdir($p_dir, 0775)) {
24522452
$this->_error("Unable to create directory '$p_dir'");
24532453
return false;
24542454
}

tests/dir_permissions.phpt

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
--TEST--
2+
test permissions of created dirs
3+
--SKIPIF--
4+
--FILE--
5+
<?php
6+
require_once dirname(__FILE__) . '/setup.php.inc';
7+
umask('000'); // force default to 777 to confirm we create tighter
8+
$tar = new Archive_Tar(dirname(__FILE__) . '/dir_permissions.tar');
9+
$tar->extract('', true);
10+
$phpunit->assertNoErrors('after');
11+
echo substr(sprintf('%o', fileperms('dir_permissions')), -4), PHP_EOL;
12+
echo 'tests done';
13+
?>
14+
--CLEAN--
15+
<?php
16+
unlink('dir_permissions/a.txt');
17+
unlink('dir_permissions/b.txt');
18+
rmdir('dir_permissions');
19+
?>
20+
--EXPECT--
21+
0775
22+
tests done

tests/dir_permissions.tar

10 KB
Binary file not shown.

0 commit comments

Comments
 (0)