Skip to content

Commit 0972774

Browse files
jnoordsijfabpot
authored andcommitted
[Mailer] [Transport] Send clone of RawMessage instance in RoundRobinTransport
1 parent f8cca42 commit 0972774

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

src/Symfony/Component/Mailer/Tests/Transport/RoundRobinTransportTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
1717
use Symfony\Component\Mailer\Transport\RoundRobinTransport;
1818
use Symfony\Component\Mailer\Transport\TransportInterface;
19+
use Symfony\Component\Mime\Header\Headers;
20+
use Symfony\Component\Mime\Message;
1921
use Symfony\Component\Mime\RawMessage;
2022

2123
/**
@@ -143,6 +145,27 @@ public function testSendOneDeadAndRecoveryWithinRetryPeriod()
143145
$this->assertTransports($t, 1, []);
144146
}
145147

148+
public function testSendOneDeadMessageAlterationsDoNotPersist()
149+
{
150+
$t1 = $this->createMock(TransportInterface::class);
151+
$t1->expects($this->once())->method('send')
152+
->willReturnCallback(function (Message $message) {
153+
$message->getHeaders()->addTextHeader('X-Transport-1', 'value');
154+
throw new TransportException();
155+
});
156+
$t2 = $this->createMock(TransportInterface::class);
157+
$t2->expects($this->once())->method('send');
158+
$t = new RoundRobinTransport([$t1, $t2]);
159+
$p = new \ReflectionProperty($t, 'cursor');
160+
$p->setValue($t, 0);
161+
$headers = new Headers();
162+
$headers->addTextHeader('X-Shared', 'value');
163+
$message = new Message($headers);
164+
$t->send($message);
165+
$this->assertSame($message->getHeaders()->get('X-Shared')->getBody(), 'value');
166+
$this->assertFalse($message->getHeaders()->has('X-Transport-1'));
167+
}
168+
146169
public function testFailureDebugInformation()
147170
{
148171
$t1 = $this->createMock(TransportInterface::class);

src/Symfony/Component/Mailer/Transport/RoundRobinTransport.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public function send(RawMessage $message, ?Envelope $envelope = null): ?SentMess
5252

5353
while ($transport = $this->getNextTransport()) {
5454
try {
55-
return $transport->send($message, $envelope);
55+
return $transport->send(clone $message, $envelope);
5656
} catch (TransportExceptionInterface $e) {
5757
$exception ??= new TransportException('All transports failed.');
5858
$exception->appendDebug(sprintf("Transport \"%s\": %s\n", $transport, $e->getDebug()));

0 commit comments

Comments
 (0)