diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index 2f88a822c9..991753c92a 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -4,6 +4,7 @@ Yii Framework 2 Change Log 2.0.0 under development ----------------------- +- Bug #5252: Null values are not properly handled by `RangeValidator` (githubjeka, qiangxue) - Bug #5260: `yii\i18n\Formatter::decimalSeparator` and `yii\i18n\Formatter::thousandSeparator` where not configurable when intl is not installed (execut, cebe) - Bug #5314: Fixed typo in the implementation of `yii\web\Session::getHasSessionId()` (qiangxue) - Bug: Date and time formatting now assumes UTC as the timezone for input dates unless a timezone is explicitly given (cebe) diff --git a/framework/validators/RangeValidator.php b/framework/validators/RangeValidator.php index d58a8b8aaa..6ce9b2976e 100644 --- a/framework/validators/RangeValidator.php +++ b/framework/validators/RangeValidator.php @@ -66,7 +66,7 @@ class RangeValidator extends Validator $in = true; - foreach ((array)$value as $v) { + foreach ((is_array($value) ? $value : [$value]) as $v) { if (!in_array($v, $this->range, $this->strict)) { $in = false; break; diff --git a/tests/unit/framework/validators/RangeValidatorTest.php b/tests/unit/framework/validators/RangeValidatorTest.php index 5232b337f7..b4cbf32214 100644 --- a/tests/unit/framework/validators/RangeValidatorTest.php +++ b/tests/unit/framework/validators/RangeValidatorTest.php @@ -41,6 +41,17 @@ class RangeValidatorTest extends TestCase $this->assertTrue($val->validate("5")); } + public function testValidateValueEmpty() + { + $val = new RangeValidator(['range' => range(10, 20, 1), 'skipOnEmpty' => false]); + $this->assertFalse($val->validate(null)); //row RangeValidatorTest.php:101 + $this->assertFalse($val->validate('0')); + $this->assertFalse($val->validate(0)); + $this->assertFalse($val->validate('')); + $val->allowArray = true; + $this->assertTrue($val->validate([])); + } + public function testValidateArrayValue() { $val = new RangeValidator(['range' => range(1, 10, 1)]);