Skip to content

Commit 0d0f775

Browse files
authored
Fix #20231: Fix regression introduced in #20167 in yii\validators\FileValidator
1 parent 65a5e52 commit 0d0f775

File tree

3 files changed

+12
-7
lines changed

3 files changed

+12
-7
lines changed

framework/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Yii Framework 2 Change Log
55
------------------------
66

77
- Bug #20232: Fix regression introduced in `GHSA-cjcc-p67m-7qxm` while attaching behavior defined by `__class` array key (erickskrauch)
8+
- Bug #20231: Fix regression introduced in #20167 in `yii\validators\FileValidator` (bizley)
89

910
2.0.51 July 18, 2024
1011
--------------------

framework/validators/FileValidator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ public function validateAttribute($model, $attribute)
209209
{
210210
$files = $this->filterFiles(is_array($model->$attribute) ? $model->$attribute : [$model->$attribute]);
211211
$filesCount = count($files);
212-
if ($filesCount === 0 && $this->minFiles > 0) {
212+
if ($filesCount === 0) {
213213
$this->addError($model, $attribute, $this->uploadRequired);
214214

215215
return;

tests/framework/validators/FileValidatorTest.php

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,11 @@ public function testValidateAttributeMultiple()
115115
]);
116116
$m = FakedValidationModel::createWithAttributes(['attr_files' => 'path']);
117117
$val->validateAttribute($m, 'attr_files');
118-
$this->assertFalse($m->hasErrors('attr_files'));
118+
$this->assertTrue($m->hasErrors('attr_files'));
119119
$m = FakedValidationModel::createWithAttributes(['attr_files' => []]);
120120
$val->validateAttribute($m, 'attr_files');
121-
$this->assertFalse($m->hasErrors('attr_files'));
121+
$this->assertTrue($m->hasErrors('attr_files'));
122+
$this->assertSame($val->uploadRequired, current($m->getErrors('attr_files')));
122123

123124
$m = FakedValidationModel::createWithAttributes(
124125
[
@@ -334,7 +335,7 @@ public function testValidateArrayAttributeWithMinMaxOneAndOneFile()
334335
'type' => 'image/png',
335336
],
336337
]
337-
)[0];
338+
)[0]; // <-- only one file
338339
$model = FakedValidationModel::createWithAttributes(['attr_images' => [$files]]);
339340

340341
$validator->validateAttribute($model, 'attr_images');
@@ -422,15 +423,17 @@ public function testValidateAttribute()
422423
$val->validateAttribute($m, 'attr_files');
423424
$this->assertFalse($m->hasErrors());
424425
$val->validateAttribute($m, 'attr_files_empty');
425-
$this->assertFalse($m->hasErrors('attr_files_empty'));
426+
$this->assertTrue($m->hasErrors('attr_files_empty'));
427+
$this->assertSame($val->uploadRequired, current($m->getErrors('attr_files_empty')));
426428

427429
// single File with skipOnEmpty = false
428430
$val = new FileValidator(['skipOnEmpty' => false]);
429431
$m = $this->createModelForAttributeTest();
430432
$val->validateAttribute($m, 'attr_files');
431433
$this->assertFalse($m->hasErrors());
432434
$val->validateAttribute($m, 'attr_files_empty');
433-
$this->assertFalse($m->hasErrors('attr_files_empty'));
435+
$this->assertTrue($m->hasErrors('attr_files_empty'));
436+
$this->assertSame($val->uploadRequired, current($m->getErrors('attr_files_empty')));
434437
$m = $this->createModelForAttributeTest();
435438

436439
// too big
@@ -689,7 +692,8 @@ public function testValidateMimeTypeCaseInsensitive($mask, $fileMimeType, $expec
689692
$this->assertEquals($expected, $validator->validate($file), sprintf('Mime type validate fail: "%s" / "%s"', $mask, $fileMimeType));
690693
}
691694

692-
public function mimeTypeCaseInsensitive() {
695+
public function mimeTypeCaseInsensitive()
696+
{
693697
return [
694698
['Image/*', 'image/jp2', true],
695699
['image/*', 'Image/jp2', true],

0 commit comments

Comments
 (0)