From d95f84a1fee18d91b8a829e0c7e3a69351f800dc Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Wed, 25 Jan 2023 12:36:39 +0900 Subject: [PATCH 1/2] Add test for do not accepting ends with newline --- tests/Validation/ValidationValidatorTest.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/Validation/ValidationValidatorTest.php b/tests/Validation/ValidationValidatorTest.php index 34ca8cd61535..74e360629759 100755 --- a/tests/Validation/ValidationValidatorTest.php +++ b/tests/Validation/ValidationValidatorTest.php @@ -4547,6 +4547,9 @@ public function testValidateAlpha() $v = new Validator($trans, ['x' => 'abc123'], ['x' => 'Alpha']); $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['x' => "abc\n"], ['x' => 'Alpha']); // ends with newline + $this->assertFalse($v->passes()); } public function testValidateAlphaNum() @@ -4566,6 +4569,9 @@ public function testValidateAlphaNum() $v = new Validator($trans, ['x' => 'नमस्कार'], ['x' => 'AlphaNum']); $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['x' => "abc\n"], ['x' => 'AlphaNum']); // ends with newline + $this->assertFalse($v->passes()); } public function testValidateAlphaDash() @@ -4582,6 +4588,9 @@ public function testValidateAlphaDash() $v = new Validator($trans, ['x' => '٧٨٩'], ['x' => 'AlphaDash']); // eastern arabic numerals $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['x' => "abc\n"], ['x' => 'AlphaDash']); // ends with newline + $this->assertFalse($v->passes()); } public function testValidateAlphaWithAsciiOption() @@ -4630,6 +4639,9 @@ public function testValidateAlphaWithAsciiOption() $v = new Validator($trans, ['x' => 'abc123'], ['x' => 'Alpha:ascii']); $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['x' => "abc\n"], ['x' => 'Alpha:ascii']); // ends with newline + $this->assertFalse($v->passes()); } public function testValidateAlphaNumWithAsciiOption() @@ -4652,6 +4664,9 @@ public function testValidateAlphaNumWithAsciiOption() $v = new Validator($trans, ['x' => 'नमस्कार'], ['x' => 'AlphaNum:ascii']); $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['x' => "abc\n"], ['x' => 'AlphaNum:ascii']); // ends with newline + $this->assertFalse($v->passes()); } public function testValidateAlphaDashWithAsciiOption() @@ -4671,6 +4686,9 @@ public function testValidateAlphaDashWithAsciiOption() $v = new Validator($trans, ['x' => '٧٨٩'], ['x' => 'AlphaDash:ascii']); // eastern arabic numerals $this->assertFalse($v->passes()); + + $v = new Validator($trans, ['x' => "abc\n"], ['x' => 'AlphaDash:ascii']); // ends with newline + $this->assertFalse($v->passes()); } public function testValidateTimezone() From 2c1521cf8e63da81cbe740875d1a2ee3a241cf25 Mon Sep 17 00:00:00 2001 From: USAMI Kenta Date: Wed, 25 Jan 2023 12:38:34 +0900 Subject: [PATCH 2/2] Use \A and \z instead of ^ and $ for preg_match() to avoid last newline matches --- .../Validation/Concerns/ValidatesAttributes.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php index 680aaf0eb353..9474ba70a075 100644 --- a/src/Illuminate/Validation/Concerns/ValidatesAttributes.php +++ b/src/Illuminate/Validation/Concerns/ValidatesAttributes.php @@ -348,10 +348,10 @@ protected function getDateTime($value) public function validateAlpha($attribute, $value, $parameters) { if (isset($parameters[0]) && $parameters[0] === 'ascii') { - return is_string($value) && preg_match('/^[a-zA-Z]+$/u', $value); + return is_string($value) && preg_match('/\A[a-zA-Z]+\z/u', $value); } - return is_string($value) && preg_match('/^[\pL\pM]+$/u', $value); + return is_string($value) && preg_match('/\A[\pL\pM]+\z/u', $value); } /** @@ -370,10 +370,10 @@ public function validateAlphaDash($attribute, $value, $parameters) } if (isset($parameters[0]) && $parameters[0] === 'ascii') { - return preg_match('/^[a-zA-Z0-9_-]+$/u', $value) > 0; + return preg_match('/\A[a-zA-Z0-9_-]+\z/u', $value) > 0; } - return preg_match('/^[\pL\pM\pN_-]+$/u', $value) > 0; + return preg_match('/\A[\pL\pM\pN_-]+\z/u', $value) > 0; } /** @@ -391,10 +391,10 @@ public function validateAlphaNum($attribute, $value, $parameters) } if (isset($parameters[0]) && $parameters[0] === 'ascii') { - return preg_match('/^[a-zA-Z0-9]+$/u', $value) > 0; + return preg_match('/\A[a-zA-Z0-9]+\z/u', $value) > 0; } - return preg_match('/^[\pL\pM\pN]+$/u', $value) > 0; + return preg_match('/\A[\pL\pM\pN]+\z/u', $value) > 0; } /**