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

Fix AddressList toString method to quote semicolon #230

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 |;" <[email protected]>',
'Reply-To: "Famous bearings |:" <[email protected]>',
];

// 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 |;" <[email protected]>', $message->from);
$this->assertEquals('Famous bearings |: <[email protected]>', $message->replyTo);
}

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