From 15b94595180ce3b2a1a75498f9fb9290aae06464 Mon Sep 17 00:00:00 2001 From: Mateusz Orzechowski Date: Wed, 28 Sep 2022 15:57:11 +0200 Subject: [PATCH] Fix \mb_convert_encoding error handling --- src/VCardParser.php | 2 +- tests/VCardParserTest.php | 10 ++++++++++ tests/invalid_encoding.vcf | 10 ++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 tests/invalid_encoding.vcf diff --git a/src/VCardParser.php b/src/VCardParser.php index 607ec80..473f481 100644 --- a/src/VCardParser.php +++ b/src/VCardParser.php @@ -189,7 +189,7 @@ protected function parse() } elseif (strpos(strtolower($type), 'charset=') === 0) { try { $value = mb_convert_encoding($value, "UTF-8", substr($type, 8)); - } catch (\Exception $e) { + } catch (\Throwable $e) { } unset($types[$i]); } diff --git a/tests/VCardParserTest.php b/tests/VCardParserTest.php index fd36ae2..e524431 100644 --- a/tests/VCardParserTest.php +++ b/tests/VCardParserTest.php @@ -292,4 +292,14 @@ public function testLabel() $parser = new VCardParser($vcard->buildVCard()); $this->assertEquals($parser->getCardAtIndex(0)->label, $label); } + + public function testInvalidEndingConversion() + { + $parser = VCardParser::parseFromFile(__DIR__ . '/invalid_encoding.vcf'); + + $cards = $parser->getCards(); + + $this->assertEquals($cards[0]->firstname, 'Jeroen'); + $this->assertEquals($cards[0]->lastname, 'Desloovere'); + } } diff --git a/tests/invalid_encoding.vcf b/tests/invalid_encoding.vcf new file mode 100644 index 0000000..463bb88 --- /dev/null +++ b/tests/invalid_encoding.vcf @@ -0,0 +1,10 @@ +BEGIN:VCARD +VERSION:3.0 +REV:2016-05-30T10:36:13Z +N;CHARSET=invalid-encoding:Desloovere;Jeroen;;; +FN;CHARSET=utf-8:Jeroen Desloovere +item1.EMAIL;type=INTERNET:site@example.com +item1.X-ABLabel:$!!$ +item2.URL:http://www.jeroendesloovere.be +item2.X-ABLabel:$!!$ +END:VCARD