Skip to content

Commit 9685c1b

Browse files
[6.x] Fix mime validation for jpeg files (#35518)
* Fix mime validation for jpeg files * Update ValidatesAttributes.php Co-authored-by: Taylor Otwell <[email protected]>
1 parent 5c438cb commit 9685c1b

File tree

2 files changed

+45
-24
lines changed

2 files changed

+45
-24
lines changed

src/Illuminate/Validation/Concerns/ValidatesAttributes.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1206,6 +1206,10 @@ public function validateMimes($attribute, $value, $parameters)
12061206
return false;
12071207
}
12081208

1209+
if (in_array('jpg', $parameters) || in_array('jpeg', $parameters)) {
1210+
$parameters = array_unique(array_merge($parameters, ['jpg', 'jpeg']));
1211+
}
1212+
12091213
return $value->getPath() !== '' && in_array($value->guessExtension(), $parameters);
12101214
}
12111215

tests/Validation/ValidationValidatorTest.php

Lines changed: 41 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2665,49 +2665,49 @@ public function testValidateImage()
26652665
$file = $this->getMockBuilder(UploadedFile::class)->setMethods(['guessExtension', 'getClientOriginalExtension'])->setConstructorArgs($uploadedFile)->getMock();
26662666
$file->expects($this->any())->method('guessExtension')->willReturn('php');
26672667
$file->expects($this->any())->method('getClientOriginalExtension')->willReturn('php');
2668-
$v = new Validator($trans, ['x' => $file], ['x' => 'Image']);
2668+
$v = new Validator($trans, ['x' => $file], ['x' => 'image']);
26692669
$this->assertFalse($v->passes());
26702670

26712671
$file2 = $this->getMockBuilder(UploadedFile::class)->setMethods(['guessExtension', 'getClientOriginalExtension'])->setConstructorArgs($uploadedFile)->getMock();
2672-
$file2->expects($this->any())->method('guessExtension')->willReturn('jpeg');
2672+
$file2->expects($this->any())->method('guessExtension')->willReturn('jpg');
26732673
$file2->expects($this->any())->method('getClientOriginalExtension')->willReturn('jpeg');
2674-
$v = new Validator($trans, ['x' => $file2], ['x' => 'Image']);
2674+
$v = new Validator($trans, ['x' => $file2], ['x' => 'image']);
2675+
$this->assertTrue($v->passes());
2676+
2677+
$file2 = $this->getMockBuilder(UploadedFile::class)->setMethods(['guessExtension', 'getClientOriginalExtension'])->setConstructorArgs($uploadedFile)->getMock();
2678+
$file2->expects($this->any())->method('guessExtension')->willReturn('jpg');
2679+
$file2->expects($this->any())->method('getClientOriginalExtension')->willReturn('jpg');
2680+
$v = new Validator($trans, ['x' => $file2], ['x' => 'image']);
26752681
$this->assertTrue($v->passes());
26762682

26772683
$file3 = $this->getMockBuilder(UploadedFile::class)->setMethods(['guessExtension', 'getClientOriginalExtension'])->setConstructorArgs($uploadedFile)->getMock();
26782684
$file3->expects($this->any())->method('guessExtension')->willReturn('gif');
26792685
$file3->expects($this->any())->method('getClientOriginalExtension')->willReturn('gif');
2680-
$v = new Validator($trans, ['x' => $file3], ['x' => 'Image']);
2686+
$v = new Validator($trans, ['x' => $file3], ['x' => 'image']);
26812687
$this->assertTrue($v->passes());
26822688

26832689
$file4 = $this->getMockBuilder(UploadedFile::class)->setMethods(['guessExtension', 'getClientOriginalExtension'])->setConstructorArgs($uploadedFile)->getMock();
26842690
$file4->expects($this->any())->method('guessExtension')->willReturn('bmp');
26852691
$file4->expects($this->any())->method('getClientOriginalExtension')->willReturn('bmp');
2686-
$v = new Validator($trans, ['x' => $file4], ['x' => 'Image']);
2692+
$v = new Validator($trans, ['x' => $file4], ['x' => 'image']);
26872693
$this->assertTrue($v->passes());
26882694

26892695
$file5 = $this->getMockBuilder(UploadedFile::class)->setMethods(['guessExtension', 'getClientOriginalExtension'])->setConstructorArgs($uploadedFile)->getMock();
26902696
$file5->expects($this->any())->method('guessExtension')->willReturn('png');
26912697
$file5->expects($this->any())->method('getClientOriginalExtension')->willReturn('png');
2692-
$v = new Validator($trans, ['x' => $file5], ['x' => 'Image']);
2698+
$v = new Validator($trans, ['x' => $file5], ['x' => 'image']);
26932699
$this->assertTrue($v->passes());
26942700

26952701
$file6 = $this->getMockBuilder(UploadedFile::class)->setMethods(['guessExtension', 'getClientOriginalExtension'])->setConstructorArgs($uploadedFile)->getMock();
26962702
$file6->expects($this->any())->method('guessExtension')->willReturn('svg');
26972703
$file6->expects($this->any())->method('getClientOriginalExtension')->willReturn('svg');
2698-
$v = new Validator($trans, ['x' => $file6], ['x' => 'Image']);
2704+
$v = new Validator($trans, ['x' => $file6], ['x' => 'image']);
26992705
$this->assertTrue($v->passes());
27002706

27012707
$file7 = $this->getMockBuilder(UploadedFile::class)->setMethods(['guessExtension', 'getClientOriginalExtension'])->setConstructorArgs($uploadedFile)->getMock();
27022708
$file7->expects($this->any())->method('guessExtension')->willReturn('webp');
27032709
$file7->expects($this->any())->method('getClientOriginalExtension')->willReturn('webp');
2704-
$v = new Validator($trans, ['x' => $file7], ['x' => 'Image']);
2705-
$this->assertTrue($v->passes());
2706-
2707-
$file2 = $this->getMockBuilder(UploadedFile::class)->setMethods(['guessExtension', 'getClientOriginalExtension'])->setConstructorArgs($uploadedFile)->getMock();
2708-
$file2->expects($this->any())->method('guessExtension')->willReturn('jpg');
2709-
$file2->expects($this->any())->method('getClientOriginalExtension')->willReturn('jpg');
2710-
$v = new Validator($trans, ['x' => $file2], ['x' => 'Image']);
2710+
$v = new Validator($trans, ['x' => $file7], ['x' => 'image']);
27112711
$this->assertTrue($v->passes());
27122712
}
27132713

@@ -2719,7 +2719,7 @@ public function testValidateImageDoesNotAllowPhpExtensionsOnImageMime()
27192719
$file = $this->getMockBuilder(UploadedFile::class)->setMethods(['guessExtension', 'getClientOriginalExtension'])->setConstructorArgs($uploadedFile)->getMock();
27202720
$file->expects($this->any())->method('guessExtension')->willReturn('jpeg');
27212721
$file->expects($this->any())->method('getClientOriginalExtension')->willReturn('php');
2722-
$v = new Validator($trans, ['x' => $file], ['x' => 'Image']);
2722+
$v = new Validator($trans, ['x' => $file], ['x' => 'image']);
27232723
$this->assertFalse($v->passes());
27242724
}
27252725

@@ -2832,20 +2832,25 @@ public function testValidateImageDimensions()
28322832
$this->assertFalse($v->passes());
28332833
}
28342834

2835-
/**
2836-
* @requires extension fileinfo
2837-
*/
2838-
public function testValidatePhpMimetypes()
2835+
public function testValidateMimetypes()
28392836
{
28402837
$trans = $this->getIlluminateArrayTranslator();
2841-
$uploadedFile = [__DIR__.'/ValidationRuleTest.php', '', null, null, null, true];
2842-
2843-
$file = $this->getMockBuilder(UploadedFile::class)->setMethods(['guessExtension', 'getClientOriginalExtension'])->setConstructorArgs($uploadedFile)->getMock();
2844-
$file->expects($this->any())->method('guessExtension')->willReturn('rtf');
2845-
$file->expects($this->any())->method('getClientOriginalExtension')->willReturn('rtf');
2838+
$uploadedFile = [__FILE__, '', null, null, null, true];
28462839

2840+
$file = $this->getMockBuilder(UploadedFile::class)->setMethods(['getMimeType'])->setConstructorArgs($uploadedFile)->getMock();
2841+
$file->expects($this->any())->method('getMimeType')->willReturn('text/rtf');
28472842
$v = new Validator($trans, ['x' => $file], ['x' => 'mimetypes:text/*']);
28482843
$this->assertTrue($v->passes());
2844+
2845+
$file = $this->getMockBuilder(UploadedFile::class)->setMethods(['getMimeType'])->setConstructorArgs($uploadedFile)->getMock();
2846+
$file->expects($this->any())->method('getMimeType')->willReturn('application/pdf');
2847+
$v = new Validator($trans, ['x' => $file], ['x' => 'mimetypes:text/rtf']);
2848+
$this->assertFalse($v->passes());
2849+
2850+
$file = $this->getMockBuilder(UploadedFile::class)->setMethods(['getMimeType'])->setConstructorArgs($uploadedFile)->getMock();
2851+
$file->expects($this->any())->method('getMimeType')->willReturn('image/jpeg');
2852+
$v = new Validator($trans, ['x' => $file], ['x' => 'mimetypes:image/jpeg']);
2853+
$this->assertTrue($v->passes());
28492854
}
28502855

28512856
public function testValidateMime()
@@ -2864,6 +2869,18 @@ public function testValidateMime()
28642869
$file2->expects($this->any())->method('isValid')->willReturn(false);
28652870
$v = new Validator($trans, ['x' => $file2], ['x' => 'mimes:pdf']);
28662871
$this->assertFalse($v->passes());
2872+
2873+
$file = $this->getMockBuilder(UploadedFile::class)->setMethods(['guessExtension', 'getClientOriginalExtension'])->setConstructorArgs($uploadedFile)->getMock();
2874+
$file->expects($this->any())->method('guessExtension')->willReturn('jpg');
2875+
$file->expects($this->any())->method('getClientOriginalExtension')->willReturn('jpg');
2876+
$v = new Validator($trans, ['x' => $file], ['x' => 'mimes:jpeg']);
2877+
$this->assertTrue($v->passes());
2878+
2879+
$file = $this->getMockBuilder(UploadedFile::class)->setMethods(['guessExtension', 'getClientOriginalExtension'])->setConstructorArgs($uploadedFile)->getMock();
2880+
$file->expects($this->any())->method('guessExtension')->willReturn('jpg');
2881+
$file->expects($this->any())->method('getClientOriginalExtension')->willReturn('jpeg');
2882+
$v = new Validator($trans, ['x' => $file], ['x' => 'mimes:jpg']);
2883+
$this->assertTrue($v->passes());
28672884
}
28682885

28692886
public function testValidateMimeEnforcesPhpCheck()

0 commit comments

Comments
 (0)