Skip to content
This repository has been archived by the owner on Jan 30, 2020. It is now read-only.

Commit

Permalink
fix AddressList toString method to quote semicolon
Browse files Browse the repository at this point in the history
  • Loading branch information
glensc committed Jul 6, 2019
1 parent ece418b commit 3ee2a5e
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 3 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ All notable changes to this project will be documented in this file, in reverse

### Fixed

- Nothing.
- [#230](https://github.com/zendframework/zend-mail/pull/230) Fix AddressList toString method to quote semicolon

## 2.10.0 - 2018-06-07

Expand Down
6 changes: 4 additions & 2 deletions src/Header/AbstractAddressList.php
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,9 @@ public function getFieldValue($format = HeaderInterface::FORMAT_RAW)
$email = $address->getEmail();
$name = $address->getName();

if (! empty($name) && false !== strstr($name, ',')) {
// quote $name if value requires so
if (! empty($name) && (false !== strpos($name, ',') || false !== strpos($name, ';'))) {
// FIXME: what if name contains double quote?
$name = sprintf('"%s"', $name);
}

Expand Down Expand Up @@ -240,7 +242,7 @@ protected static function getComments($value)
* Supposed to be private, protected as a workaround for PHP bug 68194
*
* @param string $value
* @return void
* @return string
*/
protected static function stripComments($value)
{
Expand Down
27 changes: 27 additions & 0 deletions test/Storage/MessageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use Exception as GeneralException;
use PHPUnit\Framework\TestCase;
use Zend\Mail\Exception as MailException;
use Zend\Mail\Headers;
use Zend\Mail\Storage;
use Zend\Mail\Storage\Exception;
use Zend\Mail\Storage\Message;
Expand All @@ -24,6 +25,7 @@
class MessageTest extends TestCase
{
protected $file;

protected $file2;

public function setUp()
Expand Down Expand Up @@ -432,6 +434,31 @@ public function testSpaceInFieldName()
$this->assertEquals(Mime\Decode::splitHeaderField($header, 'baz'), 42);
}

/**
* splitMessage with Headers as input fails to process AddressList with semicolons
*
* @see https://github.com/zendframework/zend-mail/pull/230
*/
public function testHeadersLosesNameQuoting()
{
$headerList = [
'From: "Famous bearings |;" <skf@example.com>',
'Reply-To: "Famous bearings |:" <skf@example.com>',
];

// create Headers object from array
Mime\Decode::splitMessage(implode("\r\n", $headerList), $headers1, $body);
$this->assertInstanceOf(Headers::class, $headers1);
// create Headers object from Headers object
Mime\Decode::splitMessage($headers1, $headers2, $body);
$this->assertInstanceOf(Headers::class, $headers2);

// test that same problem does not happen with Storage\Message internally
$message = new Message(['headers' => $headers2, 'content' => (string)$body]);
$this->assertEquals('"Famous bearings |;" <skf@example.com>', $message->from);
$this->assertEquals('Famous bearings |: <skf@example.com>', $message->replyTo);
}

/**
* @group ZF2-372
*/
Expand Down

0 comments on commit 3ee2a5e

Please sign in to comment.