From 9d2586df810b9a803c7ec816f8b950817f6f9de8 Mon Sep 17 00:00:00 2001 From: Amir Hossein Shokri Date: Thu, 17 Jul 2025 11:26:12 +0330 Subject: [PATCH 1/2] fix boolean:strict validation --- .../Concerns/ValidatesAttributes.php | 2 +- tests/Validation/ValidationValidatorTest.php | 76 +++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php index 6d03629207d5..5b9245f70ab3 100644 --- a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php +++ b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php @@ -493,7 +493,7 @@ public function validateBoolean($attribute, $value, $parameters) { $acceptable = [true, false, 0, 1, '0', '1']; - if (($parameters[0] ?? null) === 'strict') { + if (strtolower($parameters[0] ?? null) === 'strict') { $acceptable = [true, false]; } diff --git a/tests/Validation/ValidationValidatorTest.php b/tests/Validation/ValidationValidatorTest.php index f5c76189b153..a556c96035ab 100755 --- a/tests/Validation/ValidationValidatorTest.php +++ b/tests/Validation/ValidationValidatorTest.php @@ -3154,6 +3154,44 @@ public function testValidateBooleanStrict() $this->assertFalse($v->passes()); } + public function testValidateBooleanStrictWithUpperCase() + { + $trans = $this->getIlluminateArrayTranslator(); + + $v = new Validator($trans, ['foo' => false], ['foo' => 'Boolean:STRICT']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['foo' => true], ['foo' => 'Boolean:STRICT']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['foo' => 'no'], ['foo' => 'Boolean:STRICT']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 'yes'], ['foo' => 'Boolean:STRICT']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 'false'], ['foo' => 'Boolean:STRICT']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 'true'], ['foo' => 'Boolean:STRICT']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, [], ['foo' => 'Boolean:STRICT']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['foo' => '1'], ['foo' => 'Boolean:STRICT']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 1], ['foo' => 'Boolean:STRICT']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => '0'], ['foo' => 'Boolean:STRICT']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 0], ['foo' => 'Boolean:STRICT']); + $this->assertFalse($v->passes()); + } + public function testValidateBool() { $trans = $this->getIlluminateArrayTranslator(); @@ -3229,6 +3267,44 @@ public function testValidateBoolStrict() $this->assertFalse($v->passes()); } + public function testValidateBoolStrictWithUpperCase() + { + $trans = $this->getIlluminateArrayTranslator(); + + $v = new Validator($trans, ['foo' => false], ['foo' => 'Bool:STRICT']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['foo' => true], ['foo' => 'Bool:STRICT']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['foo' => 'no'], ['foo' => 'Bool:STRICT']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 'yes'], ['foo' => 'Bool']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 'false'], ['foo' => 'Bool:STRICT']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 'true'], ['foo' => 'Bool:STRICT']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, [], ['foo' => 'Bool:STRICT']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['foo' => '1'], ['foo' => 'Bool:STRICT']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 1], ['foo' => 'Bool:STRICT']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => '0'], ['foo' => 'Bool:STRICT']); + $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['foo' => 0], ['foo' => 'Bool:STRICT']); + $this->assertFalse($v->passes()); + } + public function testValidateNumeric() { $trans = $this->getIlluminateArrayTranslator(); From e984fae26c1bef16e2e273dfa57964842bc32d7b Mon Sep 17 00:00:00 2001 From: Amir Hossein Shokri Date: Thu, 17 Jul 2025 11:58:39 +0330 Subject: [PATCH 2/2] fix deprecation tests --- src/Illuminate/Validation/Concerns/ValidatesAttributes.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php index 5b9245f70ab3..1f60e150061f 100644 --- a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php +++ b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php @@ -493,7 +493,7 @@ public function validateBoolean($attribute, $value, $parameters) { $acceptable = [true, false, 0, 1, '0', '1']; - if (strtolower($parameters[0] ?? null) === 'strict') { + if (isset($parameters[0]) && strtolower($parameters[0]) === 'strict') { $acceptable = [true, false]; }