From d7ffda020b391b2fecf167a6f7e7a718bfc311fc Mon Sep 17 00:00:00 2001 From: Anna Borzenko Date: Fri, 23 Nov 2018 11:55:07 +0200 Subject: [PATCH] Fixes #16903: Fixed 'yii\validators\NumberValidator' method 'isNotNumber' returns false for true/false value --- framework/CHANGELOG.md | 1 + framework/validators/NumberValidator.php | 5 +++-- tests/framework/validators/NumberValidatorTest.php | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index 928bf920a8..ef69e2026d 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -4,6 +4,7 @@ Yii Framework 2 Change Log 2.0.16 under development ------------------------ +- Bug #16903: Fixed 'yii\validators\NumberValidator' method 'isNotNumber' returns false for true/false value (annechko) - Bug #16648: Html::strtolower() was corrupting UTF-8 strings (Kolyunya) - Bug #13977: Skip validation if file input does not exist (RobinKamps, s1lver) - Bug #16183: Fixed when `yii\helpers\BaseFileHelper` sometimes returned wrong value (samdark, SilverFire, OndrejVasicek) diff --git a/framework/validators/NumberValidator.php b/framework/validators/NumberValidator.php index 3610899bce..e6fca0fd11 100644 --- a/framework/validators/NumberValidator.php +++ b/framework/validators/NumberValidator.php @@ -124,8 +124,9 @@ class NumberValidator extends Validator private function isNotNumber($value) { return is_array($value) - || (is_object($value) && !method_exists($value, '__toString')) - || (!is_object($value) && !is_scalar($value) && $value !== null); + || is_bool($value) + || (is_object($value) && !method_exists($value, '__toString')) + || (!is_object($value) && !is_scalar($value) && $value !== null); } /** diff --git a/tests/framework/validators/NumberValidatorTest.php b/tests/framework/validators/NumberValidatorTest.php index 7fb998ca54..443cba9248 100644 --- a/tests/framework/validators/NumberValidatorTest.php +++ b/tests/framework/validators/NumberValidatorTest.php @@ -77,6 +77,8 @@ class NumberValidatorTest extends TestCase $this->assertTrue($val->validate(-20)); $this->assertTrue($val->validate('20')); $this->assertTrue($val->validate(25.45)); + $this->assertFalse($val->validate(false)); + $this->assertFalse($val->validate(true)); $this->setPointDecimalLocale(); $this->assertFalse($val->validate('25,45')); @@ -94,6 +96,8 @@ class NumberValidatorTest extends TestCase $this->assertTrue($val->validate('020')); $this->assertTrue($val->validate(0x14)); $this->assertFalse($val->validate('0x14')); // todo check this + $this->assertFalse($val->validate(false)); + $this->assertFalse($val->validate(true)); } public function testValidateValueAdvanced()