Improve domain validation

This commit is contained in:
Eduardo Gulias Davis
2020-11-14 23:29:20 +01:00
parent 740c0fe2ff
commit c41a7b491e
5 changed files with 41 additions and 20 deletions
+17 -3
View File
@@ -14,6 +14,9 @@ class EmailLexer extends AbstractLexer
const S_DOT = 46;
const S_DQUOTE = 34;
const S_SQUOTE = 39;
const S_BACKTICK = 96;
const S_OPENCURLYBRACES = 123;
const S_CLOSECURLYBRACES = 125;
const S_OPENPARENTHESIS = 49;
const S_CLOSEPARENTHESIS = 261;
const S_OPENBRACKET = 262;
@@ -21,6 +24,11 @@ class EmailLexer extends AbstractLexer
const S_HYPHEN = 264;
const S_COLON = 265;
const S_DOUBLECOLON = 266;
const S_PIPE = 124;
const S_TILDE = 126;
const S_UNDERSCORE = 95;
const S_PLUS = 43;
const S_EQUAL = 61;
const S_SP = 267;
const S_HTAB = 268;
const S_CR = 269;
@@ -52,6 +60,8 @@ class EmailLexer extends AbstractLexer
* @var array
*/
protected $charValue = array(
'{' => self::S_OPENCURLYBRACES,
'}' => self::S_CLOSECURLYBRACES,
'(' => self::S_OPENPARENTHESIS,
')' => self::S_CLOSEPARENTHESIS,
'<' => self::S_LOWERTHAN,
@@ -66,6 +76,7 @@ class EmailLexer extends AbstractLexer
',' => self::S_COMMA,
'.' => self::S_DOT,
"'" => self::S_SQUOTE,
"`" => self::S_BACKTICK,
'"' => self::S_DQUOTE,
'-' => self::S_HYPHEN,
'::' => self::S_DOUBLECOLON,
@@ -75,8 +86,6 @@ class EmailLexer extends AbstractLexer
"\n" => self::S_LF,
"\r\n" => self::CRLF,
'IPv6' => self::S_IPV6TAG,
'{' => self::S_OPENQBRACKET,
'}' => self::S_CLOSEQBRACKET,
'' => self::S_EMPTY,
'\0' => self::C_NUL,
'*' => self::ASTERISK,
@@ -85,6 +94,11 @@ class EmailLexer extends AbstractLexer
'^' => self::CARET,
'$' => self::DOLLAR,
'%' => self::PERCENTAGE,
'~' => self::S_TILDE,
'|' => self::S_PIPE,
'_' => self::S_UNDERSCORE,
'=' => self::S_EQUAL,
'+' => self::S_PLUS,
);
/**
@@ -216,7 +230,7 @@ class EmailLexer extends AbstractLexer
protected function getCatchablePatterns()
{
return array(
'[a-zA-Z_]+[46]?', //ASCII and domain literal
'[a-zA-Z]+[46]?', //ASCII and domain literal
'[^\x00-\x7F]', //UTF-8
'[0-9]+',
'\r\n',
-8
View File
@@ -245,14 +245,6 @@ class DomainPart extends Parser
*/
protected function checkDomainPartExceptions(array $prev, bool $hasComments) : Result
{
$invalidDomainTokens = array(
EmailLexer::S_DQUOTE => true,
EmailLexer::S_SQUOTE => true,
EmailLexer::S_SEMICOLON => true,
EmailLexer::S_GREATERTHAN => true,
EmailLexer::S_LOWERTHAN => true,
);
$validDomainTokens = array(
EmailLexer::GENERIC => true,
EmailLexer::S_HYPHEN => true,
+8 -2
View File
@@ -138,6 +138,7 @@ class EmailLexerTests extends TestCase
array(":", EmailLexer::S_COLON),
array(".", EmailLexer::S_DOT),
array("\"", EmailLexer::S_DQUOTE),
array("`", EmailLexer::S_BACKTICK),
array("'", EmailLexer::S_SQUOTE),
array("-", EmailLexer::S_HYPHEN),
array("\\", EmailLexer::S_BACKSLASH),
@@ -152,8 +153,13 @@ class EmailLexerTests extends TestCase
array(',', EmailLexer::S_COMMA),
array('<', EmailLexer::S_LOWERTHAN),
array('>', EmailLexer::S_GREATERTHAN),
array('{', EmailLexer::S_OPENQBRACKET),
array('}', EmailLexer::S_CLOSEQBRACKET),
array('{', EmailLexer::S_OPENCURLYBRACES),
array('}', EmailLexer::S_CLOSECURLYBRACES),
array('|', EmailLexer::S_PIPE),
array('~', EmailLexer::S_TILDE),
array('=', EmailLexer::S_EQUAL),
array('+', EmailLexer::S_PLUS),
array('_', EmailLexer::S_UNDERSCORE),
array('', EmailLexer::S_EMPTY),
array(chr(31), EmailLexer::INVALID),
array(chr(226), EmailLexer::GENERIC),
@@ -126,12 +126,20 @@ class RFCValidationDomainPartTest extends TestCase
['example@toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart.co.uk'],
['example@toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart.test.co.uk'],
['example@test.toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart.co.uk'],
['test@email*'],
['test@email!'],
['test@email&'],
['test@email^'],
['test@email%'],
['test@email$'],
['test@email*a.com'],
['test@email!a.com'],
['test@email&a.com'],
['test@email^a.com'],
['test@email%a.com'],
['test@email$a.com'],
['test@email`a.com'],
['test@email|a.com'],
['test@email~a.com'],
['test@email{a.com'],
['test@email}a.com'],
['test@email=a.com'],
['test@email+a.com'],
['test@email_a.com'],
];
}
@@ -64,7 +64,8 @@ class RFCValidationTest extends TestCase
['fab\'ien@symfony.com'],
['fab\ ien@symfony.com'],
['example((example))@fakedfake.co.uk'],
['fabien+@symfony.com'],
['fabien+a@symfony.com'],
['exampl=e@example.com'],
['инфо@письмо.рф'],
['"username"@example.com'],
['"user,name"@example.com'],