update 1.0.8.0

Commits for version update
This commit is contained in:
Manish Verma
2016-10-17 12:02:27 +05:30
parent dec927987b
commit 76e85db070
9674 changed files with 495757 additions and 58922 deletions

View File

@@ -23,6 +23,5 @@ matrix:
- php: 7.0
- php: hhvm
allow_failures:
- php: 7.0
- php: hhvm
fast_finish: true

View File

@@ -1,6 +1,15 @@
Changelog
=========
5.4.3 (2016-07-08)
------------------
* fixed SimpleHeaderSet::has()/get() when the 0 index is removed
* removed the need to have mcrypt installed
* fixed broken MIME header encoding with quotes/colons and non-ascii chars
* allowed mail transport send for messages without To header
* fixed PHP 7 support
5.4.2 (2016-05-01)
------------------

View File

@@ -1 +1 @@
Swift-5.4.2
Swift-5.4.3

View File

@@ -18,7 +18,7 @@
"php": ">=5.3.3"
},
"require-dev": {
"mockery/mockery": "~0.9.1,<0.9.4"
"mockery/mockery": "~0.9.1"
},
"autoload": {
"files": ["lib/swift_required.php"]

View File

@@ -47,7 +47,7 @@ abstract class Swift
return;
}
$path = dirname(__FILE__).'/'.str_replace('_', '/', $class).'.php';
$path = __DIR__.'/'.str_replace('_', '/', $class).'.php';
if (!file_exists($path)) {
return;

View File

@@ -48,7 +48,7 @@ class Swift_CharacterReader_GenericFixedWidthReader implements Swift_CharacterRe
$strlen = strlen($string);
// % and / are CPU intensive, so, maybe find a better way
$ignored = $strlen % $this->_width;
$ignoredChars = substr($string, -$ignored);
$ignoredChars = $ignored ? substr($string, -$ignored) : '';
$currentMap = $this->_width;
return ($strlen - $ignored) / $this->_width;

View File

@@ -215,7 +215,7 @@ class Swift_CharacterStream_NgCharacterStream implements Swift_CharacterStream
*
* @param int $length
*
* @return integer[]
* @return int[]
*/
public function readBytes($length)
{

View File

@@ -277,9 +277,7 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
*/
protected function createDisplayNameString($displayName, $shorten = false)
{
return $this->createPhrase($this, $displayName,
$this->getCharset(), $this->getEncoder(), $shorten
);
return $this->createPhrase($this, $displayName, $this->getCharset(), $this->getEncoder(), $shorten);
}
/**
@@ -299,8 +297,9 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
/**
* Redefine the encoding requirements for mailboxes.
*
* Commas and semicolons are used to separate
* multiple addresses, and should therefore be encoded
* All "specials" must be encoded as the full header value will not be quoted
*
* @see RFC 2822 3.2.1
*
* @param string $token
*
@@ -308,7 +307,7 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
*/
protected function tokenNeedsEncoding($token)
{
return preg_match('/[,;]/', $token) || parent::tokenNeedsEncoding($token);
return preg_match('/[()<>\[\]:;@\,."]/', $token) || parent::tokenNeedsEncoding($token);
}
/**

View File

@@ -140,7 +140,16 @@ class Swift_Mime_SimpleHeaderSet implements Swift_Mime_HeaderSet
{
$lowerName = strtolower($name);
return array_key_exists($lowerName, $this->_headers) && array_key_exists($index, $this->_headers[$lowerName]);
if (!array_key_exists($lowerName, $this->_headers)) {
return false;
}
if (func_num_args() < 2) {
// index was not specified, so we only need to check that there is at least one header value set
return (bool) count($this->_headers[$lowerName]);
}
return array_key_exists($index, $this->_headers[$lowerName]);
}
/**
@@ -173,10 +182,18 @@ class Swift_Mime_SimpleHeaderSet implements Swift_Mime_HeaderSet
*/
public function get($name, $index = 0)
{
if ($this->has($name, $index)) {
$lowerName = strtolower($name);
$name = strtolower($name);
return $this->_headers[$lowerName][$index];
if (func_num_args() < 2) {
if ($this->has($name)) {
$values = array_values($this->_headers[$name]);
return array_shift($values);
}
} else {
if ($this->has($name, $index)) {
return $this->_headers[$name][$index];
}
}
}

View File

@@ -41,11 +41,7 @@ class Swift_Transport_Esmtp_Auth_NTLMAuthenticator implements Swift_Transport_Es
*/
public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password)
{
if (!function_exists('mcrypt_module_open')) {
throw new LogicException('The mcrypt functions need to be enabled to use the NTLM authenticator.');
}
if (!function_exists('openssl_random_pseudo_bytes')) {
if (!function_exists('openssl_random_pseudo_bytes') || !function_exists('openssl_encrypt')) {
throw new LogicException('The OpenSSL extension must be enabled to use the NTLM authenticator.');
}
@@ -568,17 +564,15 @@ class Swift_Transport_Esmtp_Auth_NTLMAuthenticator implements Swift_Transport_Es
/**
* DES Encryption.
*
* @param string $value
* @param string $value An 8-byte string
* @param string $key
*
* @return string
*/
protected function desEncrypt($value, $key)
{
$cipher = mcrypt_module_open(MCRYPT_DES, '', 'ecb', '');
mcrypt_generic_init($cipher, $key, mcrypt_create_iv(mcrypt_enc_get_iv_size($cipher), MCRYPT_DEV_RANDOM));
return mcrypt_generic($cipher, $value);
// 1 == OPENSSL_RAW_DATA - but constant is only available as of PHP 5.4.
return substr(openssl_encrypt($value, 'DES-ECB', $key, 1), 0, 8);
}
/**

View File

@@ -125,10 +125,10 @@ class Swift_Transport_MailTransport implements Swift_Transport
$toHeader = $message->getHeaders()->get('To');
$subjectHeader = $message->getHeaders()->get('Subject');
if (!$toHeader) {
if (0 === $count) {
$this->_throwException(new Swift_TransportException('Cannot send message without a recipient'));
}
$to = $toHeader->getFieldBody();
$to = $toHeader ? $toHeader->getFieldBody() : '';
$subject = $subjectHeader ? $subjectHeader->getFieldBody() : '';
$reversePath = $this->_getReversePath($message);
@@ -139,7 +139,9 @@ class Swift_Transport_MailTransport implements Swift_Transport
$messageStr = $message->toString();
$message->getHeaders()->set($toHeader);
if ($toHeader) {
$message->getHeaders()->set($toHeader);
}
$message->getHeaders()->set($subjectHeader);
// Separate headers from body

View File

@@ -1,6 +1,6 @@
<?php
require dirname(__FILE__).'/../mime_types.php';
require __DIR__.'/../mime_types.php';
Swift_DependencyContainer::getInstance()
->register('properties.charset')

View File

@@ -19,10 +19,10 @@ if (defined('SWIFT_INIT_LOADED')) {
define('SWIFT_INIT_LOADED', true);
// Load in dependency maps
require dirname(__FILE__).'/dependency_maps/cache_deps.php';
require dirname(__FILE__).'/dependency_maps/mime_deps.php';
require dirname(__FILE__).'/dependency_maps/message_deps.php';
require dirname(__FILE__).'/dependency_maps/transport_deps.php';
require __DIR__.'/dependency_maps/cache_deps.php';
require __DIR__.'/dependency_maps/mime_deps.php';
require __DIR__.'/dependency_maps/message_deps.php';
require __DIR__.'/dependency_maps/transport_deps.php';
// Load in global library preferences
require dirname(__FILE__).'/preferences.php';
require __DIR__.'/preferences.php';

View File

@@ -17,12 +17,12 @@ if (class_exists('Swift', false)) {
}
// Load Swift utility class
require dirname(__FILE__).'/classes/Swift.php';
require __DIR__.'/classes/Swift.php';
if (!function_exists('_swiftmailer_init')) {
function _swiftmailer_init()
{
require dirname(__FILE__).'/swift_init.php';
require __DIR__.'/swift_init.php';
}
}

View File

@@ -17,12 +17,12 @@ if (class_exists('Swift', false)) {
}
// Load Swift utility class
require dirname(__FILE__).'/Swift.php';
require __DIR__.'/Swift.php';
if (!function_exists('_swiftmailer_init')) {
function _swiftmailer_init()
{
require dirname(__FILE__).'/swift_init.php';
require __DIR__.'/swift_init.php';
}
}

View File

@@ -11,6 +11,11 @@ class Swift_Mime_ContentEncoder_QpContentEncoderAcceptanceTest extends \PHPUnit_
$this->_factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory();
}
public function tearDown()
{
Swift_Preferences::getInstance()->setQPDotEscape(false);
}
public function testEncodingAndDecodingSamples()
{
$sampleFp = opendir($this->_samplesDir);
@@ -144,8 +149,6 @@ class Swift_Mime_ContentEncoder_QpContentEncoderAcceptanceTest extends \PHPUnit_
// Enable DotEscaping
Swift_Preferences::getInstance()->setQPDotEscape(true);
$this->testEncodingAndDecodingSamplesFromDiConfiguredInstance();
// Disable DotStuffing to continue
Swift_Preferences::getInstance()->setQPDotEscape(false);
}
private function _createEncoderFromContainer()

View File

@@ -7,7 +7,7 @@ gc_disable();
set_include_path(get_include_path().PATH_SEPARATOR.dirname(__DIR__).'/lib');
Mockery::getConfiguration()->allowMockingNonExistentMethods(false);
Mockery::getConfiguration()->allowMockingNonExistentMethods(true);
if (is_file(__DIR__.'/acceptance.conf.php')) {
require_once __DIR__.'/acceptance.conf.php';

View File

@@ -0,0 +1,36 @@
<?php
class Swift_Bug650Test extends \PHPUnit_Framework_TestCase
{
/**
* @dataProvider encodingDataProvider
*
* @param string $name
* @param string $expectedEncodedName
*/
public function testMailboxHeaderEncoding($name, $expectedEncodedName)
{
$factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory();
$charStream = new Swift_CharacterStream_NgCharacterStream($factory, 'utf-8');
$encoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder($charStream);
$header = new Swift_Mime_Headers_MailboxHeader('To', $encoder, new Swift_Mime_Grammar());
$header->setCharset('utf-8');
$header->setNameAddresses(array(
'test@example.com' => $name,
));
$this->assertSame('To: '.$expectedEncodedName." <test@example.com>\r\n", $header->toString());
}
public function encodingDataProvider()
{
return array(
array('this is " a test ö', 'this is =?utf-8?Q?=22?= a test =?utf-8?Q?=C3=B6?='),
array(': this is a test ö', '=?utf-8?Q?=3A?= this is a test =?utf-8?Q?=C3=B6?='),
array('( test ö', '=?utf-8?Q?=28?= test =?utf-8?Q?=C3=B6?='),
array('[ test ö', '=?utf-8?Q?=5B?= test =?utf-8?Q?=C3=B6?='),
array('@ test ö)', '=?utf-8?Q?=40?= test =?utf-8?Q?=C3=B6=29?='),
);
}
}

View File

@@ -9,6 +9,7 @@ class Swift_Smoke_AttachmentSmokeTest extends SwiftMailerSmokeTestCase
public function setUp()
{
parent::setup(); // For skip
$this->_attFile = __DIR__.'/../../../_samples/files/textfile.zip';
}

View File

@@ -9,6 +9,7 @@ class Swift_Smoke_InternationalSmokeTest extends SwiftMailerSmokeTestCase
public function setUp()
{
parent::setup(); // For skip
$this->_attFile = __DIR__.'/../../../_samples/files/textfile.zip';
}

View File

@@ -87,7 +87,7 @@ class Swift_Events_SimpleEventDispatcherTest extends \PHPUnit_Framework_TestCase
$evt = $this->_dispatcher->createSendEvent($transport, $message);
$targetListener = $this->getMock('Swift_Events_SendListener');
$otherListener = $this->getMock('Swift_Events_TransportChangeListener');
$otherListener = $this->getMock('DummyListener');
$this->_dispatcher->bindEventListener($targetListener);
$this->_dispatcher->bindEventListener($otherListener);
@@ -133,3 +133,10 @@ class Swift_Events_SimpleEventDispatcherTest extends \PHPUnit_Framework_TestCase
return new Swift_Events_SimpleEventDispatcher($map);
}
}
class DummyListener implements Swift_Events_EventListener
{
public function sendPerformed(Swift_Events_SendEvent $evt)
{
}
}

View File

@@ -357,8 +357,13 @@ class Swift_Mime_SimpleHeaderSetTest extends \PHPUnit_Framework_TestCase
$set = $this->_createSet($factory);
$set->addIdHeader('Message-ID', 'some@id');
$set->addIdHeader('Message-ID', 'other@id');
$set->remove('Message-ID', 0);
$this->assertFalse($set->has('Message-ID', 0));
$this->assertTrue($set->has('Message-ID', 1));
$this->assertTrue($set->has('Message-ID'));
$set->remove('Message-ID', 1);
$this->assertFalse($set->has('Message-ID', 1));
$this->assertFalse($set->has('Message-ID'));
}
public function testRemoveWithSpecifiedIndexLeavesOtherHeaders()

View File

@@ -8,7 +8,7 @@ class Swift_Transport_Esmtp_Auth_NTLMAuthenticatorTest extends \SwiftMailerTestC
public function setUp()
{
if (!function_exists('mcrypt_module_open') || !function_exists('openssl_random_pseudo_bytes') || !function_exists('bcmul') || !function_exists('iconv')) {
if (!function_exists('openssl_encrypt') || !function_exists('openssl_random_pseudo_bytes') || !function_exists('bcmul') || !function_exists('iconv')) {
$this->markTestSkipped(
'One of the required functions is not available.'
);

View File

@@ -9,7 +9,7 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$transport = $this->_createTransport($invoker, $dispatcher);
$headers = $this->_createHeaders();
$message = $this->_createMessage($headers);
$message = $this->_createMessageWithRecipient($headers);
$invoker->shouldReceive('mail')
->once();
@@ -27,7 +27,7 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$headers = $this->_createHeaders(array(
'To' => $to,
));
$message = $this->_createMessage($headers);
$message = $this->_createMessageWithRecipient($headers);
$to->shouldReceive('getFieldBody')
->zeroOrMoreTimes()
@@ -49,7 +49,7 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$headers = $this->_createHeaders(array(
'Subject' => $subj,
));
$message = $this->_createMessage($headers);
$message = $this->_createMessageWithRecipient($headers);
$subj->shouldReceive('getFieldBody')
->zeroOrMoreTimes()
@@ -68,7 +68,7 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$transport = $this->_createTransport($invoker, $dispatcher);
$headers = $this->_createHeaders();
$message = $this->_createMessage($headers);
$message = $this->_createMessageWithRecipient($headers);
$message->shouldReceive('toString')
->zeroOrMoreTimes()
@@ -91,7 +91,7 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$transport = $this->_createTransport($invoker, $dispatcher);
$headers = $this->_createHeaders();
$message = $this->_createMessage($headers);
$message = $this->_createMessageWithRecipient($headers);
$message->shouldReceive('getReturnPath')
->zeroOrMoreTimes()
@@ -112,7 +112,7 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$transport = $this->_createTransport($invoker, $dispatcher);
$headers = $this->_createHeaders();
$message = $this->_createMessage($headers);
$message = $this->_createMessageWithRecipient($headers);
$message->shouldReceive('getReturnPath')
->zeroOrMoreTimes()
@@ -138,7 +138,7 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$transport->setExtraParams('-x\'foo\' -f%s');
$headers = $this->_createHeaders();
$message = $this->_createMessage($headers);
$message = $this->_createMessageWithRecipient($headers);
$message->shouldReceive('getReturnPath')
->zeroOrMoreTimes()
@@ -166,7 +166,7 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$transport->setExtraParams('-x\'foo\'');
$headers = $this->_createHeaders();
$message = $this->_createMessage($headers);
$message = $this->_createMessageWithRecipient($headers);
$message->shouldReceive('getReturnPath')
->zeroOrMoreTimes()
@@ -193,7 +193,7 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$transport = $this->_createTransport($invoker, $dispatcher);
$headers = $this->_createHeaders();
$message = $this->_createMessage($headers);
$message = $this->_createMessageWithRecipient($headers);
$message->shouldReceive('toString')
->zeroOrMoreTimes()
@@ -265,7 +265,7 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$headers = $this->_createHeaders(array(
'To' => $to,
));
$message = $this->_createMessage($headers);
$message = $this->_createMessageWithRecipient($headers);
$headers->shouldReceive('remove')
->once()
@@ -289,7 +289,7 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$headers = $this->_createHeaders(array(
'Subject' => $subject,
));
$message = $this->_createMessage($headers);
$message = $this->_createMessageWithRecipient($headers);
$headers->shouldReceive('remove')
->once()
@@ -313,7 +313,7 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$headers = $this->_createHeaders(array(
'To' => $to,
));
$message = $this->_createMessage($headers);
$message = $this->_createMessageWithRecipient($headers);
$headers->shouldReceive('set')
->once()
@@ -337,7 +337,7 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$headers = $this->_createHeaders(array(
'Subject' => $subject,
));
$message = $this->_createMessage($headers);
$message = $this->_createMessageWithRecipient($headers);
$headers->shouldReceive('set')
->once()
@@ -363,7 +363,7 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$headers = $this->_createHeaders(array(
'Subject' => $subject,
));
$message = $this->_createMessage($headers);
$message = $this->_createMessageWithRecipient($headers);
$message->shouldReceive('toString')
->zeroOrMoreTimes()
->andReturn(
@@ -390,6 +390,51 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
$transport->send($message);
}
/**
* @expectedException Swift_TransportException
* @expectedExceptionMessage Cannot send message without a recipient
*/
public function testExceptionWhenNoRecipients()
{
$invoker = $this->_createInvoker();
$invoker->shouldReceive('mail');
$dispatcher = $this->_createEventDispatcher();
$transport = $this->_createTransport($invoker, $dispatcher);
$headers = $this->_createHeaders();
$message = $this->_createMessage($headers);
$transport->send($message);
}
public function noExceptionWhenRecipientsExistProvider()
{
return array(
array('To'),
array('Cc'),
array('Bcc'),
);
}
/**
* @dataProvider noExceptionWhenRecipientsExistProvider
*
* @param string $header
*/
public function testNoExceptionWhenRecipientsExist($header)
{
$invoker = $this->_createInvoker();
$invoker->shouldReceive('mail');
$dispatcher = $this->_createEventDispatcher();
$transport = $this->_createTransport($invoker, $dispatcher);
$headers = $this->_createHeaders();
$message = $this->_createMessage($headers);
$message->shouldReceive(sprintf('get%s', $header))->andReturn(array('foo@bar' => 'Foo'));
$transport->send($message);
}
// -- Creation Methods
private function _createTransport($invoker, $dispatcher)
@@ -417,6 +462,14 @@ class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
return $message;
}
private function _createMessageWithRecipient($headers, $recipient = array('foo@bar' => 'Foo'))
{
$message = $this->_createMessage($headers);
$message->shouldReceive('getTo')->andReturn($recipient);
return $message;
}
private function _createHeaders($headers = array())
{
$set = $this->getMockery('Swift_Mime_HeaderSet')->shouldIgnoreMissing();