From c551bd17fc940095ef511fcb5443b3c3038ac7f9 Mon Sep 17 00:00:00 2001 From: natechicago Date: Wed, 16 Mar 2016 21:58:22 -0500 Subject: [PATCH] [Validator] EmailValidator cannot extract hostname if email contains multiple @ symbols --- .../Validator/Constraints/EmailValidator.php | 2 +- .../Tests/Constraints/EmailValidatorTest.php | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Validator/Constraints/EmailValidator.php b/src/Symfony/Component/Validator/Constraints/EmailValidator.php index c8c3c5fc72..ec94664efd 100644 --- a/src/Symfony/Component/Validator/Constraints/EmailValidator.php +++ b/src/Symfony/Component/Validator/Constraints/EmailValidator.php @@ -37,7 +37,7 @@ class EmailValidator extends ConstraintValidator $valid = filter_var($value, FILTER_VALIDATE_EMAIL); if ($valid) { - $host = substr($value, strpos($value, '@') + 1); + $host = substr($value, strrpos($value, '@') + 1); // Check for host DNS resource records if ($valid && $constraint->checkMX) { diff --git a/src/Symfony/Component/Validator/Tests/Constraints/EmailValidatorTest.php b/src/Symfony/Component/Validator/Tests/Constraints/EmailValidatorTest.php index 10d17b5c68..b2d74bac65 100644 --- a/src/Symfony/Component/Validator/Tests/Constraints/EmailValidatorTest.php +++ b/src/Symfony/Component/Validator/Tests/Constraints/EmailValidatorTest.php @@ -125,4 +125,16 @@ class EmailValidatorTest extends AbstractConstraintValidatorTest array('AAAA', true), ); } + + public function testHostnameIsProperlyParsed() + { + DnsMock::withMockedHosts(array('baz.com' => array(array('type' => 'MX')))); + + $this->validator->validate( + '"foo@bar"@baz.com', + new Email(array('checkMX' => true)) + ); + + $this->assertNoViolation(); + } }