Skip to content

Commit 18bdafb

Browse files
committed
fix: prevent null pointer errors in get_dir_file_info when get_file_info returns null
1 parent 8c164d0 commit 18bdafb

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

system/Helpers/filesystem_helper.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,10 @@ function get_dir_file_info(string $sourceDir, bool $topLevelOnly = true, bool $r
281281
if (is_dir($sourceDir . $file) && $file[0] !== '.' && $topLevelOnly === false) {
282282
get_dir_file_info($sourceDir . $file . DIRECTORY_SEPARATOR, $topLevelOnly, true);
283283
} elseif ($file[0] !== '.') {
284-
$fileData[$file] = get_file_info($sourceDir . $file);
285-
$fileData[$file]['relative_path'] = $relativePath;
284+
if (($info = get_file_info($sourceDir . $file)) !== null) {
285+
$fileData[$file] = $info;
286+
$fileData[$file]['relative_path'] = $relativePath;
287+
}
286288
}
287289
}
288290

tests/system/Helpers/FilesystemHelperTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,6 +477,22 @@ public function testGetDirFileInfoFailure(): void
477477
$this->assertSame($expected, get_dir_file_info(SUPPORTPATH . 'Files#baker'));
478478
}
479479

480+
public function testGetDirFileInfoIgnoresDirectoriesWhenTopLevelOnlyIsTrue(): void
481+
{
482+
$dir = WRITEPATH . 'test_get_dir_file_info';
483+
mkdir($dir . '/subdir', 0777, true);
484+
file_put_contents($dir . '/file.txt', 'test');
485+
486+
$result = get_dir_file_info($dir, true);
487+
488+
unlink($dir . '/file.txt');
489+
rmdir($dir . '/subdir');
490+
rmdir($dir);
491+
492+
$this->assertArrayHasKey('file.txt', $result);
493+
$this->assertArrayNotHasKey('subdir', $result);
494+
}
495+
480496
public function testGetFileInfo(): void
481497
{
482498
$file = SUPPORTPATH . 'Files/baker/banana.php';

0 commit comments

Comments
 (0)