Commit 3b945fe2 authored by catch's avatar catch

Issue #2366043 by dawehner: Upgrade to Symfony 2.6

parent 150cbcf6
This diff is collapsed.
...@@ -173,4 +173,30 @@ public function getRequirements() { ...@@ -173,4 +173,30 @@ public function getRequirements() {
return $this->route->getRequirements(); return $this->route->getRequirements();
} }
/**
* {@inheritdoc}
*/
public function serialize() {
$data = unserialize(parent::serialize());
$data['fit'] = $this->fit;
$data['patternOutline'] = $this->patternOutline;
$data['numParts'] = $this->numParts;
return serialize($data);
}
/**
* {@inheritdoc}
*/
public function unserialize($serialized)
{
parent::unserialize($serialized);
$data = unserialize($serialized);
$this->fit = $data['fit'];
$this->patternOutline = $data['patternOutline'];
$this->numParts = $data['numParts'];
}
} }
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'), 'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'),
'Symfony\\Component\\Serializer\\' => array($vendorDir . '/symfony/serializer'), 'Symfony\\Component\\Serializer\\' => array($vendorDir . '/symfony/serializer'),
'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'), 'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'),
'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'),
'Symfony\\Component\\HttpKernel\\' => array($vendorDir . '/symfony/http-kernel'), 'Symfony\\Component\\HttpKernel\\' => array($vendorDir . '/symfony/http-kernel'),
'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'), 'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'),
'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'), 'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'),
......
This diff is collapsed.
EmailValidator [![Build Status](https://travis-ci.org/egulias/EmailValidator.png?branch=master)](https://travis-ci.org/egulias/EmailValidator) [![Coverage Status](https://coveralls.io/repos/egulias/EmailValidator/badge.png?branch=master)](https://coveralls.io/r/egulias/EmailValidator?branch=master) [![SensioLabsInsight](https://insight.sensiolabs.com/projects/b18d473e-bd5a-4d88-a7b2-7aeaee0ebd7b/small.png)](https://insight.sensiolabs.com/projects/b18d473e-bd5a-4d88-a7b2-7aeaee0ebd7b)[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/egulias/EmailValidator/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/egulias/EmailValidator/?branch=master) EmailValidator [![Build Status](https://travis-ci.org/egulias/EmailValidator.png?branch=master)](https://travis-ci.org/egulias/EmailValidator) [![Coverage Status](https://coveralls.io/repos/egulias/EmailValidator/badge.png?branch=master)](https://coveralls.io/r/egulias/EmailValidator?branch=master) [![SensioLabsInsight](https://insight.sensiolabs.com/projects/22ba6692-9c02-42e5-a65d-1c5696bfffc6/small.png)](https://insight.sensiolabs.com/projects/22ba6692-9c02-42e5-a65d-1c5696bfffc6)[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/egulias/EmailValidator/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/egulias/EmailValidator/?branch=master)
============================= =============================
##Installation## ##Installation##
Install via composer. Add to your current compooser.json ```require``` key: ```"egulias/email-validator":"1.0.x-dev" ```
Run the command below to install via Composer
```shell
composer require egulias/email-validator
```
##Usage## ##Usage##
...@@ -24,7 +29,7 @@ More advanced example (returns detailed diagnostic error codes): ...@@ -24,7 +29,7 @@ More advanced example (returns detailed diagnostic error codes):
```php ```php
<?php <?php
use egulias\EmailValidator\EmailValidator; use Egulias\EmailValidator\EmailValidator;
$validator = new EmailValidator; $validator = new EmailValidator;
$email = 'dominic@sayers.cc'; $email = 'dominic@sayers.cc';
...@@ -46,6 +51,6 @@ As this is a port from another library and work, here are other people related t ...@@ -46,6 +51,6 @@ As this is a port from another library and work, here are other people related t
* Josepf Bielawski [@stloyd](http://github.com/stloyd): For its first re-work of Dominic's lib * Josepf Bielawski [@stloyd](http://github.com/stloyd): For its first re-work of Dominic's lib
* Dominic Sayers [@dominicsayers](http://github.com/dominicsayers): The original isemail function * Dominic Sayers [@dominicsayers](http://github.com/dominicsayers): The original isemail function
##Licence## ##License##
Released under the MIT Licence attached with this code. Released under the MIT License attached with this code.
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
], ],
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.0.x-dev" "dev-master": "1.3.x-dev"
} }
}, },
"require": { "require": {
......
...@@ -31,10 +31,13 @@ class EmailLexer extends AbstractLexer ...@@ -31,10 +31,13 @@ class EmailLexer extends AbstractLexer
const S_SEMICOLON = 275; const S_SEMICOLON = 275;
const S_OPENQBRACKET = 276; const S_OPENQBRACKET = 276;
const S_CLOSEQBRACKET = 277; const S_CLOSEQBRACKET = 277;
const S_SLASH = 278;
const S_EMPTY = null; const S_EMPTY = null;
const GENERIC = 300; const GENERIC = 300;
const CRLF = 301; const CRLF = 301;
const INVALID = 302; const INVALID = 302;
const ASCII_INVALID_FROM = 127;
const ASCII_INVALID_TO = 199;
/** /**
* US-ASCII visible characters not valid for atext (@link http://tools.ietf.org/html/rfc5322#section-3.2.3) * US-ASCII visible characters not valid for atext (@link http://tools.ietf.org/html/rfc5322#section-3.2.3)
...@@ -52,6 +55,7 @@ class EmailLexer extends AbstractLexer ...@@ -52,6 +55,7 @@ class EmailLexer extends AbstractLexer
';' => self::S_SEMICOLON, ';' => self::S_SEMICOLON,
'@' => self::S_AT, '@' => self::S_AT,
'\\' => self::S_BACKSLASH, '\\' => self::S_BACKSLASH,
'/' => self::S_SLASH,
',' => self::S_COMMA, ',' => self::S_COMMA,
'.' => self::S_DOT, '.' => self::S_DOT,
'"' => self::S_DQUOTE, '"' => self::S_DQUOTE,
...@@ -67,14 +71,31 @@ class EmailLexer extends AbstractLexer ...@@ -67,14 +71,31 @@ class EmailLexer extends AbstractLexer
'>' => self::S_GREATERTHAN, '>' => self::S_GREATERTHAN,
'{' => self::S_OPENQBRACKET, '{' => self::S_OPENQBRACKET,
'}' => self::S_CLOSEQBRACKET, '}' => self::S_CLOSEQBRACKET,
'' => self::S_EMPTY '' => self::S_EMPTY,
'\0' => self::C_NUL,
); );
protected $invalidASCII = array(226 => 1,);
protected $hasInvalidTokens = false;
protected $previous; protected $previous;
public function reset()
{
$this->hasInvalidTokens = false;
parent::reset();
}
public function hasInvalidTokens()
{
return $this->hasInvalidTokens;
}
/** /**
* @param $type * @param $type
* @throws \UnexpectedValueException * @throws \UnexpectedValueException
* @return boolean
*/ */
public function find($type) public function find($type)
{ {
...@@ -100,7 +121,7 @@ public function getPrevious() ...@@ -100,7 +121,7 @@ public function getPrevious()
/** /**
* moveNext * moveNext
* *
* @return mixed * @return boolean
*/ */
public function moveNext() public function moveNext()
{ {
...@@ -112,7 +133,7 @@ public function moveNext() ...@@ -112,7 +133,7 @@ public function moveNext()
/** /**
* Lexical catchable patterns. * Lexical catchable patterns.
* *
* @return array * @return string[]
*/ */
protected function getCatchablePatterns() protected function getCatchablePatterns()
{ {
...@@ -130,7 +151,7 @@ protected function getCatchablePatterns() ...@@ -130,7 +151,7 @@ protected function getCatchablePatterns()
/** /**
* Lexical non-catchable patterns. * Lexical non-catchable patterns.
* *
* @return array * @return string[]
*/ */
protected function getNonCatchablePatterns() protected function getNonCatchablePatterns()
{ {
...@@ -146,14 +167,48 @@ protected function getNonCatchablePatterns() ...@@ -146,14 +167,48 @@ protected function getNonCatchablePatterns()
*/ */
protected function getType(&$value) protected function getType(&$value)
{ {
if ($this->isNullType($value)) {
return self::C_NUL;
}
if (isset($this->charValue[$value])) { if (isset($this->charValue[$value])) {
return $this->charValue[$value]; return $this->charValue[$value];
} }
if (preg_match('/[\x10-\x1F]+/', $value)) { if ($this->isInvalid($value)) {
$this->hasInvalidTokens = true;
return self::INVALID; return self::INVALID;
} }
return self::GENERIC; return self::GENERIC;
} }
/**
* @param string $value
*/
protected function isNullType($value)
{
if ($value === "\0") {
return true;
}
return false;
}
/**
* @param string $value
*/
protected function isInvalid($value)
{
if (preg_match('/[\x10-\x1F]+/', $value)) {
return true;
}
if (isset($this->invalidASCII[ord($value)])) {
return true;
}
return false;
}
} }
...@@ -28,6 +28,9 @@ public function __construct(EmailLexer $lexer) ...@@ -28,6 +28,9 @@ public function __construct(EmailLexer $lexer)
$this->domainPartParser = new DomainPart($this->lexer); $this->domainPartParser = new DomainPart($this->lexer);
} }
/**
* @param string $str
*/
public function parse($str) public function parse($str)
{ {
$this->lexer->setInput($str); $this->lexer->setInput($str);
...@@ -36,6 +39,10 @@ public function parse($str) ...@@ -36,6 +39,10 @@ public function parse($str)
throw new \InvalidArgumentException('ERR_NOLOCALPART'); throw new \InvalidArgumentException('ERR_NOLOCALPART');
} }
if ($this->lexer->hasInvalidTokens()) {
throw new \InvalidArgumentException('ERR_INVALID_ATEXT');
}
$this->localPartParser->parse($str); $this->localPartParser->parse($str);
$this->domainPartParser->parse($str); $this->domainPartParser->parse($str);
...@@ -78,6 +85,10 @@ protected function hasAtToken() ...@@ -78,6 +85,10 @@ protected function hasAtToken()
return true; return true;
} }
/**
* @param string $localPart
* @param string $parsedDomainPart
*/
protected function addLongEmailWarning($localPart, $parsedDomainPart) protected function addLongEmailWarning($localPart, $parsedDomainPart)
{ {
if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) { if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) {
......
...@@ -2,8 +2,6 @@ ...@@ -2,8 +2,6 @@
namespace Egulias\EmailValidator; namespace Egulias\EmailValidator;
use Egulias\EmailValidator\Parser\LocalPart;
/** /**
* EmailValidator * EmailValidator
* *
...@@ -97,7 +95,7 @@ public function isValid($email, $checkDNS = false, $strict = false) ...@@ -97,7 +95,7 @@ public function isValid($email, $checkDNS = false, $strict = false)
return false; return false;
} }
return ($strict) ? (!$this->hasWarnings() && $dns) : true; return !$strict || (!$this->hasWarnings() && $dns);
} }
/** /**
...@@ -146,16 +144,9 @@ public function getThreshold() ...@@ -146,16 +144,9 @@ public function getThreshold()
protected function checkDNS() protected function checkDNS()
{ {
$checked = false; $checked = true;
if (!function_exists('dns_get_record') && (
in_array(self::DNSWARN_NO_RECORD, $this->warnings) &&
in_array(self::DNSWARN_NO_MX_RECORD, $this->warnings)
)) {
return $checked;
}
$result = checkdnsrr(trim($this->parser->getParsedDomainPart()), 'MX'); $result = checkdnsrr(trim($this->parser->getParsedDomainPart()), 'MX');
$checked = true;
if (!$result) { if (!$result) {
$this->warnings[] = self::DNSWARN_NO_RECORD; $this->warnings[] = self::DNSWARN_NO_RECORD;
......
...@@ -23,6 +23,9 @@ public function parse($domainPart) ...@@ -23,6 +23,9 @@ public function parse($domainPart)
if ($this->lexer->token['type'] === EmailLexer::S_EMPTY) { if ($this->lexer->token['type'] === EmailLexer::S_EMPTY) {
throw new \InvalidArgumentException('ERR_NODOMAIN'); throw new \InvalidArgumentException('ERR_NODOMAIN');
} }
if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN) {
throw new \InvalidArgumentException('ERR_DOMAINHYPHENEND');
}
if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) {
$this->warnings[] = EmailValidator::DEPREC_COMMENT; $this->warnings[] = EmailValidator::DEPREC_COMMENT;
...@@ -103,6 +106,10 @@ protected function doParseDomainPart() ...@@ -103,6 +106,10 @@ protected function doParseDomainPart()
do { do {
$prev = $this->lexer->getPrevious(); $prev = $this->lexer->getPrevious();
if ($this->lexer->token['type'] === EmailLexer::S_SLASH) {
throw new \InvalidArgumentException('ERR_DOMAIN_CHAR_NOT_ALLOWED');
}
if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) {
$this->parseComments(); $this->parseComments();
$this->lexer->moveNext(); $this->lexer->moveNext();
...@@ -210,6 +217,9 @@ protected function doParseDomainLiteral() ...@@ -210,6 +217,9 @@ protected function doParseDomainLiteral()
return $addressLiteral;