fix #188, adding TLD warnings

This commit is contained in:
Eduardo Gulias Davis
2020-10-10 18:47:15 +02:00
parent e5bdc237eb
commit cbe0d20542
2 changed files with 26 additions and 16 deletions
+10 -2
View File
@@ -138,6 +138,7 @@ class DomainPart extends Parser
protected function doParseDomainPart() : Result
{
$tldMissing = true;
$domain = '';
do {
$prev = $this->lexer->getPrevious();
@@ -182,6 +183,11 @@ class DomainPart extends Parser
}
$domain .= $this->lexer->token['value'];
if ($this->lexer->token['type'] === EmailLexer::S_DOT && $this->lexer->isNextToken(EmailLexer::GENERIC)) {
$tldMissing = false;
}
$this->lexer->moveNext();
if ($this->lexer->token['type'] === EmailLexer::S_SP) {
return new InvalidEmail(new CharNotAllowed(), $this->lexer->token['value']);
@@ -189,6 +195,8 @@ class DomainPart extends Parser
} while (null !== $this->lexer->token['type']);
$this->addTLDWarnings($tldMissing);
$this->domainPart = $domain;
return new ValidEmail();
}
@@ -270,9 +278,9 @@ class DomainPart extends Parser
}
}
protected function addTLDWarnings()
private function addTLDWarnings(bool $isTLDMissing) : void
{
if ($this->warnings[DomainLiteral::CODE]) {
if ($isTLDMissing) {
$this->warnings[TLD::CODE] = new TLD();
}
}
@@ -38,6 +38,7 @@ use Egulias\EmailValidator\Result\Reason\DomainHyphened;
use Egulias\EmailValidator\Result\Reason\ExpectingATEXT;
use Egulias\EmailValidator\Result\Reason\ExpectingDTEXT;
use Egulias\EmailValidator\Result\Reason\UnclosedComment;
use Egulias\EmailValidator\Warning\TLD;
class RFCValidationTest extends TestCase
{
@@ -119,7 +120,8 @@ class RFCValidationTest extends TestCase
public function getValidEmailsWithWarnings()
{
return [
['a5aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com', [new LocalTooLong()]]
['a5aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@example.com', [new LocalTooLong()]],
['example@example', [new TLD()]]
];
}
@@ -272,24 +274,24 @@ class RFCValidationTest extends TestCase
[[Comment::CODE,CFWSNearAt::CODE], 'example(examplecomment)@invalid.example.com'],
[[QuotedString::CODE, CFWSWithFWS::CODE,], "\"\t\"@invalid.example.com"],
[[QuotedString::CODE, CFWSWithFWS::CODE,], "\"\r\"@invalid.example.com"],
[[AddressLiteral::CODE,], 'example@[127.0.0.1]'],
[[AddressLiteral::CODE,], 'example@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:7334]'],
[[AddressLiteral::CODE, IPV6Deprecated::CODE], 'example@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370::]'],
[[AddressLiteral::CODE, IPV6MaxGroups::CODE,], 'example@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:7334::]'],
[[AddressLiteral::CODE, IPV6DoubleColon::CODE,], 'example@[IPv6:1::1::1]'],
[[ObsoleteDTEXT::CODE, DomainLiteral::CODE,], "example@[\n]"],
[[DomainLiteral::CODE,], 'example@[::1]'],
[[DomainLiteral::CODE,], 'example@[::123.45.67.178]'],
[[AddressLiteral::CODE, TLD::CODE], 'example@[127.0.0.1]'],
[[AddressLiteral::CODE, TLD::CODE], 'example@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:7334]'],
[[AddressLiteral::CODE, IPV6Deprecated::CODE, TLD::CODE], 'example@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370::]'],
[[AddressLiteral::CODE, IPV6MaxGroups::CODE, TLD::CODE], 'example@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:7334::]'],
[[AddressLiteral::CODE, IPV6DoubleColon::CODE, TLD::CODE], 'example@[IPv6:1::1::1]'],
[[ObsoleteDTEXT::CODE, DomainLiteral::CODE, TLD::CODE], "example@[\n]"],
[[DomainLiteral::CODE, TLD::CODE], 'example@[::1]'],
[[DomainLiteral::CODE, TLD::CODE], 'example@[::123.45.67.178]'],
[
[IPV6ColonStart::CODE, AddressLiteral::CODE, IPV6GroupCount::CODE,],
[IPV6ColonStart::CODE, AddressLiteral::CODE, IPV6GroupCount::CODE, TLD::CODE],
'example@[IPv6::2001:0db8:85a3:0000:0000:8a2e:0370:7334]'
],
[
[AddressLiteral::CODE, IPV6BadChar::CODE,],
[AddressLiteral::CODE, IPV6BadChar::CODE, TLD::CODE],
'example@[IPv6:z001:0db8:85a3:0000:0000:8a2e:0370:7334]'
],
[
[AddressLiteral::CODE, IPV6ColonEnd::CODE,],
[AddressLiteral::CODE, IPV6ColonEnd::CODE, TLD::CODE],
'example@[IPv6:2001:0db8:85a3:0000:0000:8a2e:0370:]'
],
[[QuotedString::CODE,], '"example"@invalid.example.com'],
@@ -306,13 +308,13 @@ class RFCValidationTest extends TestCase
'example@toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart.co.uk'
],
[
[DomainTooLong::CODE, LabelTooLong::CODE,],
[DomainTooLong::CODE, LabelTooLong::CODE, TLD::CODE],
'example2@toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocal'.
'parttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart'.
'toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart'
],
[
[DomainTooLong::CODE, LabelTooLong::CODE,],
[DomainTooLong::CODE, LabelTooLong::CODE, TLD::CODE],
'example@toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocal'.
'parttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart'.
'toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpar'