Skip to content

Commit f2b8160

Browse files
0x346e3730fabpot
authored andcommitted
[Mime] Fix undefined array key 0 when empty sender
1 parent 2ea06df commit f2b8160

File tree

4 files changed

+25
-1
lines changed

4 files changed

+25
-1
lines changed

Email.php

+4
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,10 @@ public function addFrom(...$addresses)
121121
*/
122122
public function from(...$addresses)
123123
{
124+
if (!$addresses) {
125+
throw new LogicException('"from()" must be called with at least one address.');
126+
}
127+
124128
return $this->setListAddressHeaderBody('From', $addresses);
125129
}
126130

Message.php

+4-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,10 @@ public function generateMessageId(): string
140140
if ($this->headers->has('Sender')) {
141141
$sender = $this->headers->get('Sender')->getAddress();
142142
} elseif ($this->headers->has('From')) {
143-
$sender = $this->headers->get('From')->getAddresses()[0];
143+
if (!$froms = $this->headers->get('From')->getAddresses()) {
144+
throw new LogicException('A "From" header must have at least one email address.');
145+
}
146+
$sender = $froms[0];
144147
} else {
145148
throw new LogicException('An email must have a "From" or a "Sender" header.');
146149
}

Tests/EmailTest.php

+8
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use PHPUnit\Framework\TestCase;
1616
use Symfony\Component\Mime\Address;
1717
use Symfony\Component\Mime\Email;
18+
use Symfony\Component\Mime\Exception\LogicException;
1819
use Symfony\Component\Mime\Part\DataPart;
1920
use Symfony\Component\Mime\Part\Multipart\AlternativePart;
2021
use Symfony\Component\Mime\Part\Multipart\MixedPart;
@@ -62,6 +63,13 @@ public function testSender()
6263
$this->assertSame($fabien, $e->getSender());
6364
}
6465

66+
public function testFromWithNoAddress()
67+
{
68+
$e = new Email();
69+
$this->expectException(LogicException::class);
70+
$e->from();
71+
}
72+
6573
public function testFrom()
6674
{
6775
$e = new Email();

Tests/MessageTest.php

+9
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\Mime\Address;
16+
use Symfony\Component\Mime\Exception\LogicException;
1617
use Symfony\Component\Mime\Header\Headers;
1718
use Symfony\Component\Mime\Header\MailboxListHeader;
1819
use Symfony\Component\Mime\Header\UnstructuredHeader;
@@ -125,6 +126,14 @@ public function testGetPreparedHeadersHasSenderWhenNeeded()
125126
$this->assertEquals('[email protected]', $message->getPreparedHeaders()->get('Sender')->getAddress()->getAddress());
126127
}
127128

129+
public function testGenerateMessageIdThrowsWhenHasFromButNoAddresses()
130+
{
131+
$message = new Message();
132+
$message->getHeaders()->addMailboxListHeader('From', []);
133+
$this->expectException(LogicException::class);
134+
$message->generateMessageId();
135+
}
136+
128137
public function testToString()
129138
{
130139
$message = new Message();

0 commit comments

Comments
 (0)