Skip to content

Commit 000fc09

Browse files
authored
Merge pull request #362 from alies-dev/fix-for-broken-PHP_INI_SCAN_DIR-value
Fix handling of additional INI directory files
2 parents 8288fd6 + cd860a4 commit 000fc09

File tree

2 files changed

+62
-17
lines changed

2 files changed

+62
-17
lines changed

src/Installing/Ini/RemoveIniEntryWithFileGetContents.php

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
use function file_exists;
1919
use function file_get_contents;
2020
use function in_array;
21+
use function is_array;
22+
use function is_dir;
2123
use function preg_replace;
2224
use function scandir;
2325
use function sprintf;
@@ -38,25 +40,28 @@ public function __invoke(Package $package, TargetPlatform $targetPlatform, Outpu
3840
}
3941

4042
$additionalIniDirectory = $targetPlatform->phpBinaryPath->additionalIniDirectory();
41-
if ($additionalIniDirectory !== null) {
42-
$allIniFiles = array_merge(
43-
array_map(
44-
static function (string $path) use ($additionalIniDirectory): string {
45-
return $additionalIniDirectory . DIRECTORY_SEPARATOR . $path;
46-
},
47-
array_filter(
48-
scandir($additionalIniDirectory),
49-
static function (string $path) use ($additionalIniDirectory): bool {
50-
if (in_array($path, ['.', '..'])) {
51-
return false;
52-
}
53-
54-
return file_exists($additionalIniDirectory . DIRECTORY_SEPARATOR . $path);
43+
if ($additionalIniDirectory !== null && file_exists($additionalIniDirectory) && is_dir($additionalIniDirectory)) {
44+
$filenames = scandir($additionalIniDirectory);
45+
if (is_array($filenames)) {
46+
$allIniFiles = array_merge(
47+
array_map(
48+
static function (string $path) use ($additionalIniDirectory): string {
49+
return $additionalIniDirectory . DIRECTORY_SEPARATOR . $path;
5550
},
51+
array_filter(
52+
$filenames,
53+
static function (string $path) use ($additionalIniDirectory): bool {
54+
if (in_array($path, ['.', '..'])) {
55+
return false;
56+
}
57+
58+
return file_exists($additionalIniDirectory . DIRECTORY_SEPARATOR . $path);
59+
},
60+
),
5661
),
57-
),
58-
$allIniFiles,
59-
);
62+
$allIniFiles,
63+
);
64+
}
6065
}
6166

6267
// Make sure all symlinks are resolved

test/unit/Installing/Ini/RemoveIniEntryWithFileGetContentsTest.php

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,46 @@ public function testRelevantIniFilesHaveExtensionRemoved(ExtensionType $extensio
128128
);
129129
}
130130

131+
#[DataProvider('extensionTypeProvider')]
132+
public function testNonExistentAdditionalIniDirectoryDoesNotCrash(ExtensionType $extensionType): void
133+
{
134+
$phpBinaryPath = $this->createMock(PhpBinaryPath::class);
135+
$phpBinaryPath
136+
->method('loadedIniConfigurationFile')
137+
->willReturn(null);
138+
$phpBinaryPath
139+
->method('additionalIniDirectory')
140+
->willReturn('/this/path/should/not/exist/for/testing');
141+
142+
$package = new Package(
143+
$this->createMock(CompletePackageInterface::class),
144+
$extensionType,
145+
ExtensionName::normaliseFromString('foobar'),
146+
'foobar/foobar',
147+
'1.2.3',
148+
null,
149+
);
150+
151+
$targetPlatform = new TargetPlatform(
152+
OperatingSystem::NonWindows,
153+
OperatingSystemFamily::Linux,
154+
$phpBinaryPath,
155+
Architecture::x86_64,
156+
ThreadSafetyMode::ThreadSafe,
157+
1,
158+
null,
159+
);
160+
161+
self::assertSame(
162+
[],
163+
(new RemoveIniEntryWithFileGetContents())(
164+
$package,
165+
$targetPlatform,
166+
$this->createMock(OutputInterface::class),
167+
),
168+
);
169+
}
170+
131171
#[RequiresOperatingSystemFamily('Linux')]
132172
public function testSymlinkedIniFilesAreResolved(): void
133173
{

0 commit comments

Comments
 (0)