Skip to content

Commit dba2cee

Browse files
committed
fix: handle fileperms() errors in getchmod()
Fixes the documented FIXME by returning false when fileperms() fails.
1 parent d9c53e1 commit dba2cee

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed

src/wp-admin/includes/class-wp-filesystem-direct.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,15 +249,19 @@ public function owner( $file ) {
249249
/**
250250
* Gets the permissions of the specified file or filepath in their octal format.
251251
*
252-
* FIXME does not handle errors in fileperms()
253-
*
254252
* @since 2.5.0
255253
*
256254
* @param string $file Path to the file.
257-
* @return string Mode of the file (the last 3 digits).
255+
* @return string|false Mode of the file (the last 3 digits), false on failure.
258256
*/
259257
public function getchmod( $file ) {
260-
return substr( decoct( @fileperms( $file ) ), -3 );
258+
$perms = @fileperms( $file );
259+
260+
if ( false === $perms ) {
261+
return false;
262+
}
263+
264+
return substr( decoct( $perms ), -3 );
261265
}
262266

263267
/**

tests/phpunit/tests/filesystem/wpFilesystemDirect/getchmod.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,16 @@ public function test_should_get_chmod_for_a_path_that_exists( $path ) {
3333

3434
/**
3535
* Tests that `WP_Filesystem_Direct::getchmod()` returns
36-
* the permissions for a path that does not exist.
36+
* false for a path that does not exist.
3737
*
3838
* @dataProvider data_paths_that_do_not_exist
3939
*
4040
* @ticket 57774
4141
*
4242
* @param string $path The path.
4343
*/
44-
public function test_should_get_chmod_for_a_path_that_does_not_exist( $path ) {
44+
public function test_should_return_false_for_a_path_that_does_not_exist( $path ) {
4545
$actual = self::$filesystem->getchmod( self::$file_structure['test_dir']['path'] . $path );
46-
$this->assertNotSame( '', $actual );
46+
$this->assertFalse( $actual );
4747
}
4848
}

0 commit comments

Comments
 (0)