Skip to content

Commit d7160e5

Browse files
committed
Allow line breaks in date headers #258
1 parent bc3d0fd commit d7160e5

3 files changed

Lines changed: 25 additions & 1 deletion

File tree

src/Header/Consumer/DateConsumerService.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class DateConsumerService extends GenericConsumerService
2626
*/
2727
protected function getPartForToken(string $token, bool $isLiteral) : ?IHeaderPart
2828
{
29-
return $this->partFactory->newToken($token, true);
29+
return $this->partFactory->newToken($token, false);
3030
}
3131

3232
/**

tests/MailMimeParser/Header/Consumer/DateConsumerServiceTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,19 @@ public function testConsumeDates() : void
5757
$this->assertEquals($date, $ret[0]->getDateTime()->format(DateTime::RFC2822));
5858
}
5959

60+
public function testConsumeMultilineDate() : void
61+
{
62+
$date = "Wed,\r\n 17 May\r 2000\n 19:08:29 -0400";
63+
$dateSl = 'Wed, 17 May 2000 19:08:29 -0400';
64+
$ret = $this->dateConsumer->__invoke($date);
65+
$this->assertNotEmpty($ret);
66+
$this->assertCount(1, $ret);
67+
$this->assertInstanceOf('\\' . \ZBateson\MailMimeParser\Header\Part\DatePart::class, $ret[0]);
68+
$this->assertFalse($ret[0]->hasErrors(), join(', ', array_map(fn ($e) => $e->getMessage(), $ret[0]->getAllErrors())));
69+
$this->assertEquals($dateSl, $ret[0]->getValue());
70+
$this->assertEquals($dateSl, $ret[0]->getDateTime()->format(DateTime::RFC2822));
71+
}
72+
6073
public function testConsumeDateWithComment() : void
6174
{
6275
$dateTest = 'Wed, 17 May 2000 19:08:29 -0400 (some comment)';

tests/MailMimeParser/Header/DateHeaderTest.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,17 @@ public function testSimpleDate() : void
6464
$this->assertEquals('Wed, 17 May 2000 19:08:29 -0400', $dt->format(\DateTime::RFC2822));
6565
}
6666

67+
public function testDateWithNewLine() : void
68+
{
69+
$date = 'Wed, 17 May 2000 19:08:29 -0400';
70+
$header = $this->newDateHeader('Date', "Wed,\r\n 17 May 2000 19:08:29 -0400");
71+
$this->assertEquals($date, $header->getValue());
72+
$this->assertFalse($header->hasErrors(), join(', ', array_map(fn ($e) => $e->getMessage(), $header->getAllErrors())));
73+
$dt = $header->getDateTime();
74+
$this->assertNotNull($dt);
75+
$this->assertEquals($date, $dt->format(\DateTime::RFC2822));
76+
}
77+
6778
public function testInvalidDate() : void
6879
{
6980
$header = $this->newDateHeader('DATE', 'This is not a date');

0 commit comments

Comments
 (0)