diff --git a/.phpstan-baseline.neon b/.phpstan-baseline.neon index 62119146ec6..1dad7b509d2 100644 --- a/.phpstan-baseline.neon +++ b/.phpstan-baseline.neon @@ -42925,26 +42925,6 @@ parameters: count: 1 path: tests/Unit/Components/DispatchFormatHelperTest.php - - - message: "#^Method Shopware\\\\Tests\\\\Unit\\\\Components\\\\EmailValidatorTest\\:\\:getValidEmails\\(\\) has no return type specified\\.$#" - count: 1 - path: tests/Unit/Components/EmailValidatorTest.php - - - - message: "#^Method Shopware\\\\Tests\\\\Unit\\\\Components\\\\EmailValidatorTest\\:\\:getinvalidEmails\\(\\) has no return type specified\\.$#" - count: 1 - path: tests/Unit/Components/EmailValidatorTest.php - - - - message: "#^Method Shopware\\\\Tests\\\\Unit\\\\Components\\\\EmailValidatorTest\\:\\:testInvalidEmails\\(\\) has no return type specified\\.$#" - count: 1 - path: tests/Unit/Components/EmailValidatorTest.php - - - - message: "#^Method Shopware\\\\Tests\\\\Unit\\\\Components\\\\EmailValidatorTest\\:\\:testValidEmails\\(\\) has no return type specified\\.$#" - count: 1 - path: tests/Unit/Components/EmailValidatorTest.php - - message: "#^Method Shopware\\\\Tests\\\\Unit\\\\Components\\\\Escaper\\\\EscaperTest\\:\\:testItCastsNullToEmptyStrings\\(\\) has no return type specified\\.$#" count: 1 diff --git a/engine/Shopware/Components/Validator/EmailValidator.php b/engine/Shopware/Components/Validator/EmailValidator.php index e5d610ab40d..1eb4c4e388a 100644 --- a/engine/Shopware/Components/Validator/EmailValidator.php +++ b/engine/Shopware/Components/Validator/EmailValidator.php @@ -34,8 +34,6 @@ class EmailValidator implements EmailValidatorInterface */ public function isValid($emailAddress) { - // Inspired by the regex used in symfony/validator - // See: https://github.com/symfony/validator/blob/dae70b74fe173461395cfd61a5c5245e05e511f5/Constraints/EmailValidator.php#L72 - return (bool) preg_match('/^\S+\@\S+\.\S+$/', $emailAddress); + return (bool) filter_var($emailAddress, FILTER_VALIDATE_EMAIL); } } diff --git a/tests/Unit/Components/EmailValidatorTest.php b/tests/Unit/Components/EmailValidatorTest.php index 9d0abfacc45..5d10b363100 100644 --- a/tests/Unit/Components/EmailValidatorTest.php +++ b/tests/Unit/Components/EmailValidatorTest.php @@ -29,76 +29,80 @@ class EmailValidatorTest extends TestCase { - /** - * @var EmailValidator - */ - private $SUT; + private EmailValidator $SUT; protected function setUp(): void { $this->SUT = new EmailValidator(); } - public function getValidEmails() + /** + * @return array> + */ + public function getValidEmails(): array { return [ // old domains - ['test@example.de'], - ['test@example.com'], - ['test@example.org'], + 'test@example.de' => ['test@example.de'], + 'test@example.com' => ['test@example.com'], + 'test@example.org' => ['test@example.org'], // new released domains - ['test@example.berlin'], - ['test@example.email'], - ['test@example.systems'], + 'test@example.berlin' => ['test@example.berlin'], + 'test@example.email' => ['test@example.email'], + 'test@example.systems' => ['test@example.systems'], // new non released domains - ['test@example.active'], - ['test@example.love'], - ['test@example.video'], - ['test@example.app'], - ['test@example.shop'], + 'test@example.active' => ['test@example.active'], + 'test@example.love' => ['test@example.love'], + 'test@example.video' => ['test@example.video'], + 'test@example.app' => ['test@example.app'], + 'test@example.shop' => ['test@example.shop'], - ['disposable.style.email.with+symbol@example.com'], - ['other.email-with-dash@example.com'], - - // We will ignore quoted string local parts - // this would blow up the simple regex method - // array('"much.more unusual"@example.com'), + 'disposable.style.email.with+symbol@example.com' => ['disposable.style.email.with+symbol@example.com'], + 'other.email-with-dash@example.com' => ['other.email-with-dash@example.com'], + '"much.more.unusual"@example.com' => ['"much.more.unusual"@example.com'], + '!#$%&*+-/=?^_`.{|}~@example.com' => ['!#$%&*+-/=?^_`.{|}~@example.com'], ]; } /** * @dataProvider getValidEmails - * - * @param string $email */ - public function testValidEmails($email) + public function testValidEmails(string $email): void { static::assertTrue($this->SUT->isValid($email)); } - public function getinvalidEmails() + /** + * @return array> + */ + public function getInvalidEmails(): array { return [ - ['test'], - ['test@.de'], - ['@example'], - ['@example.de'], - ['@.'], - [' @foo.de'], - ['@foo.'], - ['foo@ .de'], - ['foo@bar. '], + 'test' => ['test'], + 'test@.de' => ['test@.de'], + '@example' => ['@example'], + '@example.de' => ['@example.de'], + '@.' => ['@.'], + ' @foo.de' => [' @foo.de'], + '@foo.' => ['@foo.'], + 'foo@ .de' => ['foo@ .de'], + 'foo@bar. ' => ['foo@bar. '], + "testing@example.com'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(" => ["testing@example.com'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR("], + "testing@example.com'||''||'" => ["testing@example.com'||''||'"], + "testing@example.com'|||'" => ["testing@example.com'|||'"], + "testing@example.com'||'" => ["testing@example.com'||'"], + 'test@example.com|' => ['test@example.com|'], + 'test@example.com(' => ['test@example.com('], + 'test@example.com"' => ['test@example.com"'], ]; } /** * @dataProvider getInvalidEmails - * - * @param string $email */ - public function testInvalidEmails($email) + public function testInvalidEmails(string $email): void { static::assertFalse($this->SUT->isValid($email)); }