Skip to content

Commit 93c9970

Browse files
committed
refactor: uploading files with disallowed extensions should get InvalidExtensionException
1 parent 6b3adbc commit 93c9970

File tree

3 files changed

+29
-9
lines changed

3 files changed

+29
-9
lines changed

src/LfmPath.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,12 +255,14 @@ public function validateUploadedFile($file)
255255

256256
$validator->mimetypeIsNotExcutable(config('lfm.disallowed_mimetypes', ['text/x-php', 'text/html', 'text/plain']));
257257

258-
$validator->extensionIsNotExcutable(config('lfm.disallowed_extensions', ['php', 'html']));
258+
$validator->extensionIsNotExcutable();
259259

260260
if (config('lfm.should_validate_mime', false)) {
261261
$validator->mimeTypeIsValid($this->helper->availableMimeTypes());
262262
}
263263

264+
$validator->extensionIsValid(config('lfm.disallowed_extensions', []));
265+
264266
if (config('lfm.should_validate_size', false)) {
265267
$validator->sizeIsLowerThanConfiguredMaximum($this->helper->maxUploadSize());
266268
}

src/LfmUploadValidator.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,12 @@ public function mimetypeIsNotExcutable($excutable_mimetypes)
7373
return $this;
7474
}
7575

76-
public function extensionIsNotExcutable($excutable_extensions)
76+
public function extensionIsNotExcutable()
7777
{
7878
$extension = strtolower($this->file->getClientOriginalExtension());
7979

80+
$excutable_extensions = ['php', 'html'];
81+
8082
if (in_array($extension, $excutable_extensions)) {
8183
throw new ExcutableFileException();
8284
}
@@ -103,14 +105,18 @@ public function mimeTypeIsValid($available_mime_types)
103105
return $this;
104106
}
105107

106-
public function extensionIsValid()
108+
public function extensionIsValid($disallowed_extensions)
107109
{
108110
$extension = strtolower($this->file->getClientOriginalExtension());
109111

110112
if (preg_match('/[^a-zA-Z0-9]/', $extension) > 0) {
111113
throw new InvalidExtensionException();
112114
}
113115

116+
if (in_array($extension, $disallowed_extensions)) {
117+
throw new InvalidExtensionException();
118+
}
119+
114120
return $this;
115121
}
116122

tests/LfmUploadValidatorTest.php

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,22 @@ public function testPassesExtensionIsNotExcutable()
141141

142142
$this->expectNotToPerformAssertions();
143143

144-
$validator->extensionIsNotExcutable(['php', 'html']);
144+
$validator->extensionIsNotExcutable();
145+
}
146+
147+
public function testFailsExtensionIsNotExcutableWithPhp()
148+
{
149+
$uploaded_file = m::mock(UploadedFile::class);
150+
$uploaded_file->shouldReceive('getClientOriginalExtension')->andReturn('php');
151+
152+
$validator = new LfmUploadValidator($uploaded_file);
153+
154+
$this->expectException(ExcutableFileException::class);
155+
156+
$validator->extensionIsNotExcutable();
145157
}
146158

147-
public function testFailsExtensionIsNotExcutable()
159+
public function testFailsExtensionIsNotExcutableWithHtml()
148160
{
149161
$uploaded_file = m::mock(UploadedFile::class);
150162
$uploaded_file->shouldReceive('getClientOriginalExtension')->andReturn('html');
@@ -153,7 +165,7 @@ public function testFailsExtensionIsNotExcutable()
153165

154166
$this->expectException(ExcutableFileException::class);
155167

156-
$validator->extensionIsNotExcutable(['php', 'html']);
168+
$validator->extensionIsNotExcutable();
157169
}
158170

159171
public function testFailsExtensionIsNotExcutableWithExtensionNotLowerCase()
@@ -165,7 +177,7 @@ public function testFailsExtensionIsNotExcutableWithExtensionNotLowerCase()
165177

166178
$this->expectException(ExcutableFileException::class);
167179

168-
$validator->extensionIsNotExcutable(['php', 'html']);
180+
$validator->extensionIsNotExcutable();
169181
}
170182

171183
public function testFailsExtensionIsNotExcutableWithExtensionsStartsWithPhp()
@@ -177,7 +189,7 @@ public function testFailsExtensionIsNotExcutableWithExtensionsStartsWithPhp()
177189

178190
$this->expectException(ExcutableFileException::class);
179191

180-
$validator->extensionIsNotExcutable(['php', 'html']);
192+
$validator->extensionIsNotExcutable();
181193
}
182194

183195
public function testFailsExtensionIsNotExcutableWithExtensionsEndsWithHtml()
@@ -201,7 +213,7 @@ public function testFailsExtensionIsValidWithSpecialCharacters()
201213

202214
$this->expectException(InvalidExtensionException::class);
203215

204-
$validator->extensionIsValid();
216+
$validator->extensionIsValid([]);
205217
}
206218

207219
public function testPassesSizeIsLowerThanConfiguredMaximum()

0 commit comments

Comments
 (0)