From c8e26a01ba4367fc4ae9536633c462d92cbca8d8 Mon Sep 17 00:00:00 2001 From: ivanghisleni Date: Fri, 26 Aug 2022 14:24:48 +0200 Subject: [PATCH] Message headers: skip records with unsupported characters (#546) --- src/Message/Headers.php | 6 +++++- tests/MessageTest.php | 16 ++++++++++++++++ tests/fixtures/undefined_charset_header.eml | 20 ++++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 tests/fixtures/undefined_charset_header.eml diff --git a/src/Message/Headers.php b/src/Message/Headers.php index 0dc63526..ac8c7fff 100644 --- a/src/Message/Headers.php +++ b/src/Message/Headers.php @@ -14,7 +14,11 @@ public function __construct(\stdClass $headers) $headers = \array_change_key_case((array) $headers); foreach ($headers as $key => $value) { - $this[$key] = $this->parseHeader($key, $value); + try { + $this[$key] = $this->parseHeader($key, $value); + } catch (\Ddeboer\Imap\Exception\UnsupportedCharsetException $e) { + // safely skip header with unsupported charset + } } } diff --git a/tests/MessageTest.php b/tests/MessageTest.php index 26e2d741..614d7f0b 100644 --- a/tests/MessageTest.php +++ b/tests/MessageTest.php @@ -1067,4 +1067,20 @@ public function testGbkCharsetDecoding(): void static::assertSame('Hi', \trim($message->getDecodedContent())); } + + public function testUndefinedCharset(): void + { + $this->mailbox->addMessage($this->getFixture('undefined_charset_header')); + + $message = $this->mailbox->getMessage(1); + + $headers = $message->getHeaders(); + + static::assertCount(1, $message->getTo()); + static::assertSame('<201702270351.BGF77614@bla.bla>', $headers['message_id']); + static::assertArrayNotHasKey('subject', $headers); + static::assertArrayNotHasKey('from', $headers); + static::assertNull($message->getSubject()); + static::assertNull($message->getFrom()); + } } diff --git a/tests/fixtures/undefined_charset_header.eml b/tests/fixtures/undefined_charset_header.eml new file mode 100644 index 00000000..117a33e4 --- /dev/null +++ b/tests/fixtures/undefined_charset_header.eml @@ -0,0 +1,20 @@ +X-Real-To: +X-Stored-In: BlaBla +Return-Path: +Received: from + by bla.bla (CommuniGate Pro RULE 6.1.13) + with RULE id 14057804; Mon, 27 Feb 2017 13:21:44 +0930 +X-Autogenerated: Mirror +Resent-From: +Resent-Date: Mon, 27 Feb 2017 13:21:44 +0930 +Message-Id: <201702270351.BGF77614@bla.bla> +From: =?X-IAS-German?B?bXlHb3Y=?= +To: sales@bla.bla +Subject: =?X-IAS-German?B?U3VibWl0IHlvdXIgdGF4IHJlZnVuZCB8IEF1c3RyYWxpYW4gVGF4YXRpb24gT2ZmaWNlLg==?= +Date: 27 Feb 2017 04:51:29 +0100 +MIME-Version: 1.0 +Content-Type: text/html; + charset="iso-8859-1" +Content-Transfer-Encoding: quoted-printable + +) \ No newline at end of file