8000 bug #39954 [Mailer][Mime] Fix case-sensitive handling of header names… · symfony/symfony@cedcb55 · GitHub
[go: up one dir, main page]

Skip to content

Commit cedcb55

Browse files
committed
bug #39954 [Mailer][Mime] Fix case-sensitive handling of header names (piku235)
This PR was squashed before being merged into the 5.2 branch. Discussion ---------- [Mailer][Mime] Fix case-sensitive handling of header names | Q | A | ------------- | --- | Branch? | 5.2 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix #39953 | License | MIT | Doc PR | - Fixes case-sensitive handling of header names in "Mime" and "Mailer" component, more in the [ticket](#39953). Commits ------- d563c84 [Mailer][Mime] Fix case-sensitive handling of header names
2 parents 8f325f5 + d563c84 commit cedcb55

File tree

4 files changed

+29
-3
lines changed

4 files changed

+29
-3
lines changed

src/Symfony/Component/Mailer/EventListener/MessageListener.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public function addHeaderRule(string $headerName, int $rule): void
5858
throw new InvalidArgumentException(sprintf('The "%d" rule is not supported.', $rule));
5959
}
6060

61-
$this->headerRules[$headerName] = $rule;
61+
$this->headerRules[strtolower($headerName)] = $rule;
6262
}
6363

6464
public function onMessage(MessageEvent $event): void

src/Symfony/Component/Mailer/Tests/EventListener/MessageListenerTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,5 +101,17 @@ public function provideHeaders(): iterable
101101
->add(new MailboxListHeader('bcc', [new Address('bcc-initial@example.com'), new Address('bcc-default@example.com'), new Address('bcc-default-1@example.com')]))
102102
;
103103
yield 'bcc, add another bcc (unique header)' => [$initialHeaders, $defaultHeaders, $expectedHeaders];
104+
105+
$initialHeaders = (new Headers())
106+
->add(new UnstructuredHeader('foo', 'initial'))
107+
;
108+
$defaultHeaders = (new Headers())
109+
->add(new UnstructuredHeader('foo', 'bar'))
110+
->add(new UnstructuredHeader('bar', 'foo'))
111+
;
112+
$rules = [
113+
'Foo' => MessageListener::HEADER_REPLACE,
114+
];
115+
yield 'Capitalized header rule (case-insensitive), replace if set' => [$initialHeaders, $defaultHeaders, $defaultHeaders, $rules];
104116
}
105117
}

src/Symfony/Component/Mime/Header/Headers.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public function addParameterizedHeader(string $name, string $value, array $param
143143
*/
144144
public function addHeader(string $name, $argument, array $more = []): self
145145
{
146-
$parts = explode('\\', self::HEADER_CLASS_MAP[$name] ?? UnstructuredHeader::class);
146+
$parts = explode('\\', self::HEADER_CLASS_MAP[strtolower($name)] ?? UnstructuredHeader::class);
147147
$method = 'add'.ucfirst(array_pop($parts));
148148
if ('addUnstructuredHeader' === $method) {
149149
$method = 'addTextHeader';
@@ -217,7 +217,7 @@ public function remove(string $name): void
217217

218218
public static function isUniqueHeader(string $name): bool
219219
{
220-
return \in_array($name, self::UNIQUE_HEADERS, true);
220+
return \in_array(strtolower($name), self::UNIQUE_HEADERS, true);
221221
}
222222

223223
/**

src/Symfony/Component/Mime/Tests/Header/HeadersTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,20 @@ public function testRemoveIsNotCaseSensitive()
239239
$this->assertFalse($headers->has('Message-ID'));
240240
}
241241

242+
public function testAddHeaderIsNotCaseSensitive()
243+
{
244+
$headers = new Headers();
245+
$headers->addHeader('From', ['from@example.com']);
246+
247+
$this->assertInstanceOf(MailboxListHeader::class, $headers->get('from'));
248+
$this->assertEquals([new Address('from@example.com')], $headers->get('from')->getBody());
249+
}
250+
251+
public function testIsUniqueHeaderIsNotCaseSensitive()
252+
{
253+
$this->assertTrue(Headers::isUniqueHeader('From'));
254+
}
255+
242256
public function testToStringJoinsHeadersTogether()
243257
{
244258
$headers = new Headers();

0 commit comments

Comments
 (0)
0