]> source.dussan.org Git - nextcloud-server.git/commitdiff
Do not throw errors when invalid setTo email is provided 34775/head
authorJulius Härtl <jus@bitgrid.net>
Mon, 24 Oct 2022 14:45:24 +0000 (16:45 +0200)
committerJulius Härtl <jus@bitgrid.net>
Thu, 3 Nov 2022 15:59:12 +0000 (16:59 +0100)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
lib/private/Mail/Message.php
tests/lib/Mail/MessageTest.php

index c1b08b4e231d2865d36c0936a5e0ec6c87e7eb7e..8b94f44ddba0c12cc3128b613cf283d565a61447 100644 (file)
@@ -78,14 +78,18 @@ class Message implements IMessage {
                $convertedAddresses = [];
 
                foreach ($addresses as $email => $readableName) {
-                       if (!is_numeric($email)) {
-                               [$name, $domain] = explode('@', $email, 2);
-                               $domain = idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46);
-                               $convertedAddresses[$name.'@'.$domain] = $readableName;
+                       $parsableEmail = is_numeric($email) ? $readableName : $email;
+                       if (strpos($parsableEmail, '@') === false) {
+                               $convertedAddresses[$parsableEmail] = $readableName;
+                               continue;
+                       }
+
+                       [$name, $domain] = explode('@', $parsableEmail, 2);
+                       $domain = idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46);
+                       if (is_numeric($email)) {
+                               $convertedAddresses[] = $name . '@' . $domain;
                        } else {
-                               [$name, $domain] = explode('@', $readableName, 2);
-                               $domain = idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46);
-                               $convertedAddresses[$email] = $name.'@'.$domain;
+                               $convertedAddresses[$name . '@' . $domain] = $readableName;
                        }
                }
 
index f30630824fcd74f7262b0a4ea05d57a5960ac28b..bec70d1c78a3b3e506415dbff02f43b162085dd4 100644 (file)
@@ -102,12 +102,23 @@ class MessageTest extends TestCase {
                $this->assertSame('lukas@owncloud.com', $this->message->getReplyTo());
        }
 
-       public function testSetTo() {
+       /** @dataProvider dataSetTo */
+       public function testSetTo(array $to, array $expected) {
                $this->swiftMessage
                        ->expects($this->once())
                        ->method('setTo')
-                       ->with(['lukas@owncloud.com']);
-               $this->message->setTo(['lukas@owncloud.com']);
+                       ->with($expected);
+               $this->message->setTo($to);
+       }
+
+       public function dataSetTo(): array {
+               return [
+                       [['robot@example.com'], ['robot@example.com']],
+                       [['robot'], ['robot' => 'robot']],
+                       [['robot' => 'robot display name'], ['robot' => 'robot display name']],
+                       [['example@🤖.com'], ['example@xn--yp9h.com']],
+                       [['example@🤖.com' => 'A robot'], ['example@xn--yp9h.com' => 'A robot']],
+               ];
        }
 
        /**