Fix various compatibility issues with PHP 8
This commit is contained in:
committed by
Frédéric Guillot
parent
f5bb55bdb8
commit
4bf3b0d459
176
libs/swiftmailer/classes/Swift/Mime/Grammar.php
Normal file
176
libs/swiftmailer/classes/Swift/Mime/Grammar.php
Normal file
@@ -0,0 +1,176 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of SwiftMailer.
|
||||
* (c) 2004-2009 Chris Corbyn
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Defines the grammar to use for validation, implements the RFC 2822 (and friends) ABNF grammar definitions.
|
||||
*
|
||||
* @author Fabien Potencier
|
||||
* @author Chris Corbyn
|
||||
*/
|
||||
class Swift_Mime_Grammar
|
||||
{
|
||||
/**
|
||||
* Special characters used in the syntax which need to be escaped.
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
private static $_specials = array();
|
||||
|
||||
/**
|
||||
* Tokens defined in RFC 2822 (and some related RFCs).
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
private static $_grammar = array();
|
||||
|
||||
/**
|
||||
* Initialize some RFC 2822 (and friends) ABNF grammar definitions.
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->init();
|
||||
}
|
||||
|
||||
public function __wakeup()
|
||||
{
|
||||
$this->init();
|
||||
}
|
||||
|
||||
protected function init()
|
||||
{
|
||||
if (count(self::$_specials) > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
self::$_specials = array(
|
||||
'(', ')', '<', '>', '[', ']',
|
||||
':', ';', '@', ',', '.', '"',
|
||||
);
|
||||
|
||||
/*** Refer to RFC 2822 for ABNF grammar ***/
|
||||
|
||||
// All basic building blocks
|
||||
self::$_grammar['NO-WS-CTL'] = '[\x01-\x08\x0B\x0C\x0E-\x19\x7F]';
|
||||
self::$_grammar['WSP'] = '[ \t]';
|
||||
self::$_grammar['CRLF'] = '(?:\r\n)';
|
||||
self::$_grammar['FWS'] = '(?:(?:'.self::$_grammar['WSP'].'*'.
|
||||
self::$_grammar['CRLF'].')?'.self::$_grammar['WSP'].')';
|
||||
self::$_grammar['text'] = '[\x00-\x08\x0B\x0C\x0E-\x7F]';
|
||||
self::$_grammar['quoted-pair'] = '(?:\\\\'.self::$_grammar['text'].')';
|
||||
self::$_grammar['ctext'] = '(?:'.self::$_grammar['NO-WS-CTL'].
|
||||
'|[\x21-\x27\x2A-\x5B\x5D-\x7E])';
|
||||
// Uses recursive PCRE (?1) -- could be a weak point??
|
||||
self::$_grammar['ccontent'] = '(?:'.self::$_grammar['ctext'].'|'.
|
||||
self::$_grammar['quoted-pair'].'|(?1))';
|
||||
self::$_grammar['comment'] = '(\((?:'.self::$_grammar['FWS'].'|'.
|
||||
self::$_grammar['ccontent'].')*'.self::$_grammar['FWS'].'?\))';
|
||||
self::$_grammar['CFWS'] = '(?:(?:'.self::$_grammar['FWS'].'?'.
|
||||
self::$_grammar['comment'].')*(?:(?:'.self::$_grammar['FWS'].'?'.
|
||||
self::$_grammar['comment'].')|'.self::$_grammar['FWS'].'))';
|
||||
self::$_grammar['qtext'] = '(?:'.self::$_grammar['NO-WS-CTL'].
|
||||
'|[\x21\x23-\x5B\x5D-\x7E])';
|
||||
self::$_grammar['qcontent'] = '(?:'.self::$_grammar['qtext'].'|'.
|
||||
self::$_grammar['quoted-pair'].')';
|
||||
self::$_grammar['quoted-string'] = '(?:'.self::$_grammar['CFWS'].'?"'.
|
||||
'('.self::$_grammar['FWS'].'?'.self::$_grammar['qcontent'].')*'.
|
||||
self::$_grammar['FWS'].'?"'.self::$_grammar['CFWS'].'?)';
|
||||
self::$_grammar['atext'] = '[a-zA-Z0-9!#\$%&\'\*\+\-\/=\?\^_`\{\}\|~]';
|
||||
self::$_grammar['atom'] = '(?:'.self::$_grammar['CFWS'].'?'.
|
||||
self::$_grammar['atext'].'+'.self::$_grammar['CFWS'].'?)';
|
||||
self::$_grammar['dot-atom-text'] = '(?:'.self::$_grammar['atext'].'+'.
|
||||
'(\.'.self::$_grammar['atext'].'+)*)';
|
||||
self::$_grammar['dot-atom'] = '(?:'.self::$_grammar['CFWS'].'?'.
|
||||
self::$_grammar['dot-atom-text'].'+'.self::$_grammar['CFWS'].'?)';
|
||||
self::$_grammar['word'] = '(?:'.self::$_grammar['atom'].'|'.
|
||||
self::$_grammar['quoted-string'].')';
|
||||
self::$_grammar['phrase'] = '(?:'.self::$_grammar['word'].'+?)';
|
||||
self::$_grammar['no-fold-quote'] = '(?:"(?:'.self::$_grammar['qtext'].
|
||||
'|'.self::$_grammar['quoted-pair'].')*")';
|
||||
self::$_grammar['dtext'] = '(?:'.self::$_grammar['NO-WS-CTL'].
|
||||
'|[\x21-\x5A\x5E-\x7E])';
|
||||
self::$_grammar['no-fold-literal'] = '(?:\[(?:'.self::$_grammar['dtext'].
|
||||
'|'.self::$_grammar['quoted-pair'].')*\])';
|
||||
|
||||
// Message IDs
|
||||
self::$_grammar['id-left'] = '(?:'.self::$_grammar['dot-atom-text'].'|'.
|
||||
self::$_grammar['no-fold-quote'].')';
|
||||
self::$_grammar['id-right'] = '(?:'.self::$_grammar['dot-atom-text'].'|'.
|
||||
self::$_grammar['no-fold-literal'].')';
|
||||
|
||||
// Addresses, mailboxes and paths
|
||||
self::$_grammar['local-part'] = '(?:'.self::$_grammar['dot-atom'].'|'.
|
||||
self::$_grammar['quoted-string'].')';
|
||||
self::$_grammar['dcontent'] = '(?:'.self::$_grammar['dtext'].'|'.
|
||||
self::$_grammar['quoted-pair'].')';
|
||||
self::$_grammar['domain-literal'] = '(?:'.self::$_grammar['CFWS'].'?\[('.
|
||||
self::$_grammar['FWS'].'?'.self::$_grammar['dcontent'].')*?'.
|
||||
self::$_grammar['FWS'].'?\]'.self::$_grammar['CFWS'].'?)';
|
||||
self::$_grammar['domain'] = '(?:'.self::$_grammar['dot-atom'].'|'.
|
||||
self::$_grammar['domain-literal'].')';
|
||||
self::$_grammar['addr-spec'] = '(?:'.self::$_grammar['local-part'].'@'.
|
||||
self::$_grammar['domain'].')';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the grammar defined for $name token.
|
||||
*
|
||||
* @param string $name exactly as written in the RFC
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getDefinition($name)
|
||||
{
|
||||
if (array_key_exists($name, self::$_grammar)) {
|
||||
return self::$_grammar[$name];
|
||||
}
|
||||
|
||||
throw new Swift_RfcComplianceException(
|
||||
"No such grammar '".$name."' defined."
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the tokens defined in RFC 2822 (and some related RFCs).
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getGrammarDefinitions()
|
||||
{
|
||||
return self::$_grammar;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the current special characters used in the syntax which need to be escaped.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getSpecials()
|
||||
{
|
||||
return self::$_specials;
|
||||
}
|
||||
|
||||
/**
|
||||
* Escape special characters in a string (convert to quoted-pairs).
|
||||
*
|
||||
* @param string $token
|
||||
* @param string[] $include additional chars to escape
|
||||
* @param string[] $exclude chars from escaping
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function escapeSpecials($token, $include = array(), $exclude = array())
|
||||
{
|
||||
foreach (array_merge(array('\\'), array_diff(self::$_specials, $exclude), $include) as $char) {
|
||||
$token = str_replace($char, '\\'.$char, $token);
|
||||
}
|
||||
|
||||
return $token;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user