]> git.pld-linux.org Git - packages/php-ZendFramework.git/blobdiff - zf-mail-2.4-fixes.patch
up to 2.4.13
[packages/php-ZendFramework.git] / zf-mail-2.4-fixes.patch
index b5f593592cb6d6f6210748af854601c7d492aeaf..f26fb79a073c487609e975b20e9b0d5da2fe0454 100644 (file)
@@ -277,3 +277,300 @@ index b416f52a..c05cde1b 100644
              }
          }
          return $headers;
+
+commit 8892c77410b08d2f0df90d4813904c10d741bd20
+Author: Daniel Król <daniel@krol.me>
+Date:   Wed Dec 2 17:24:47 2015 +0100
+
+    Inverse decode-split order, allow special char containing labels
+
+diff --git a/src/Header/AbstractAddressList.php b/src/Header/AbstractAddressList.php
+index e0b4e78c..64e5f8f9 100644
+--- a/src/Header/AbstractAddressList.php
++++ b/src/Header/AbstractAddressList.php
+@@ -42,31 +42,44 @@ abstract class AbstractAddressList implements HeaderInterface
+     public static function fromString($headerLine)
+     {
+         list($fieldName, $fieldValue) = GenericHeader::splitHeaderLine($headerLine);
+-        $decodedValue = HeaderWrap::mimeDecodeValue($fieldValue);
+-        $wasEncoded = ($decodedValue !== $fieldValue);
+-        $fieldValue = $decodedValue;
+-
+         if (strtolower($fieldName) !== static::$type) {
+             throw new Exception\InvalidArgumentException(sprintf(
+-                'Invalid header line for "%s" string',
+-                __CLASS__
+-            ));
+-        }
+-        $header = new static();
+-        if ($wasEncoded) {
+-            $header->setEncoding('UTF-8');
++                    'Invalid header line for "%s" string',
++                    __CLASS__
++                ));
+         }
++
+         // split value on ","
+         $fieldValue = str_replace(Headers::FOLDING, ' ', $fieldValue);
+         $fieldValue = preg_replace('/[^:]+:([^;]*);/', '$1,', $fieldValue);
+-        $values     = str_getcsv($fieldValue, ',');
++        $values = str_getcsv($fieldValue, ',');
++
++        $wasEncoded = false;
+         array_walk(
+             $values,
+-            function (&$value) {
+-                $value = trim($value);
++            function (&$value) use (&$wasEncoded) {
++                $decodedValue = HeaderWrap::mimeDecodeValue($value);
++                $wasEncoded = $wasEncoded || ($decodedValue !== $value);
++                $value = trim($decodedValue);
+                 $value = self::stripComments($value);
++                $value = preg_replace(
++                    [
++                        '#(?<!\\\)"(.*)(?<!\\\)"#', //quoted-text
++                        '#\\\([\x01-\x09\x0b\x0c\x0e-\x7f])#' //quoted-pair
++                    ],
++                    [
++                        '\\1',
++                        '\\1'
++                    ],
++                    $value
++                );
+             }
+         );
++        $header = new static();
++        if ($wasEncoded) {
++            $header->setEncoding('UTF-8');
++        }
++
+         $values = array_filter($values);
+         $addressList = $header->getAddressList();
+
+commit 9b54b914885a3c07fa7522fe1bedf7fb4482392b
+Author: Daniel Król <daniel@krol.me>
+Date:   Wed Dec 2 17:01:45 2015 +0100
+
+    Use RFC compliant EOL to allow new lines in message body
+    http://www.ietf.org/rfc/rfc2821.txt
+
+diff --git a/src/Message.php b/src/Message.php
+index e16c2438..f83c2961 100644
+--- a/src/Message.php
++++ b/src/Message.php
+@@ -551,7 +551,7 @@ class Message
+         $message = new static();
+         $headers = null;
+         $content = null;
+-        Mime\Decode::splitMessage($rawMessage, $headers, $content);
++        Mime\Decode::splitMessage($rawMessage, $headers, $content, Headers::EOL);
+         if ($headers->has('mime-version')) {
+             // todo - restore body to mime\message
+         }
+
+commit 788375fa8b156424a6b9afe40dac23ba6f00b916
+Author: Marvin Feldmann <BreyndotEchse@users.noreply.github.com>
+Date:   Fri Apr 15 16:53:17 2016 +0200
+
+    Allow DNS Hostnames
+
+diff --git a/src/Address.php b/src/Address.php
+index e97878d5..e4c89d20 100644
+--- a/src/Address.php
++++ b/src/Address.php
+@@ -27,7 +27,7 @@ class Address implements Address\AddressInterface
+      */
+     public function __construct($email, $name = null)
+     {
+-        $emailAddressValidator = new EmailAddressValidator(Hostname::ALLOW_LOCAL);
++        $emailAddressValidator = new EmailAddressValidator(Hostname::ALLOW_DNS | Hostname::ALLOW_LOCAL);
+         if (! is_string($email) || empty($email)) {
+             throw new Exception\InvalidArgumentException('Email must be a valid email address');
+         }
+
+commit e37c5e15185143eaaff7f2c4c2a64f605926c978
+Author: Marvin Feldmann <BreyndotEchse@users.noreply.github.com>
+Date:   Tue Apr 19 16:24:38 2016 +0200
+
+    Return email address(es) with ACE
+
+diff --git a/src/Header/AbstractAddressList.php b/src/Header/AbstractAddressList.php
+index 64e5f8f9..db40486a 100644
+--- a/src/Header/AbstractAddressList.php
++++ b/src/Header/AbstractAddressList.php
+@@ -94,6 +94,19 @@ abstract class AbstractAddressList implements HeaderInterface
+         return $this->fieldName;
+     }
++    /**
++     * Safely convert UTF-8 encoded domain name to ASCII
++     * @param string $domainName  the UTF-8 encoded email
++     * @return string
++     */
++    protected function idnToAscii($domainName)
++    {
++        if (extension_loaded('intl')) {
++            return (idn_to_ascii($domainName) ?: $domainName);
++        }
++        return $domainName;
++    }
++
+     public function getFieldValue($format = HeaderInterface::FORMAT_RAW)
+     {
+         $emails   = array();
+@@ -103,22 +116,29 @@ abstract class AbstractAddressList implements HeaderInterface
+             $email = $address->getEmail();
+             $name  = $address->getName();
+-            if (empty($name)) {
+-                $emails[] = $email;
+-                continue;
+-            }
+-
+-            if (false !== strstr($name, ',')) {
++            if (!empty($name) && false !== strstr($name, ',')) {
+                 $name = sprintf('"%s"', $name);
+             }
+             if ($format === HeaderInterface::FORMAT_ENCODED
+                 && 'ASCII' !== $encoding
+             ) {
+-                $name = HeaderWrap::mimeEncodeValue($name, $encoding);
++                if (!empty($name)) {
++                    $name = HeaderWrap::mimeEncodeValue($name, $encoding);
++                }
++
++                if (preg_match('/^(.+)@([^@]+)$/', $email, $matches)) {
++                    $localPart = $matches[1];
++                    $hostname  = $this->idnToAscii($matches[2]);
++                    $email = sprintf('%s@%s', $localPart, $hostname);
++                }
+             }
+-            $emails[] = sprintf('%s <%s>', $name, $email);
++            if (empty($name)) {
++                $emails[] = $email;
++            } else {
++                $emails[] = sprintf('%s <%s>', $name, $email);
++            }
+         }
+         // Ensure the values are valid before sending them.
+
+commit 6bbdb6b5b8f549fa9f87cc5a6adbb558dfefeb99
+Merge: 786a1418 e00ac010
+Author: Elan Ruusamäe <glen@delfi.ee>
+Date:   Sun May 14 15:16:24 2017 +0300
+
+    Merge branch 'fix-129' into develop-2.4
+    
+    fixing:
+    https://github.com/zendframework/zend-mail/issues/129
+
+commit ddf2e8ec39394774e753b9a44793e845134a3524
+Author: Matthew Weier O'Phinney <matthew@zend.com>
+Date:   Thu May 5 12:56:11 2016 -0500
+
+    Merge branch 'hotfix/86'
+    
+    Close #86
+
+diff --git a/src/Headers.php b/src/Headers.php
+index c05cde1b..eac2bf9f 100644
+--- a/src/Headers.php
++++ b/src/Headers.php
+@@ -228,7 +228,11 @@ class Headers implements Countable, Iterator
+         }
+         if ($fieldValue === null) {
+-            $this->addHeader(Header\GenericHeader::fromString($headerFieldNameOrLine));
++            $headers = $this->loadHeader($headerFieldNameOrLine);
++            $headers = is_array($headers) ? $headers : [$headers];
++            foreach ($headers as $header) {
++                $this->addHeader($header);
++            }
+         } elseif (is_array($fieldValue)) {
+             foreach ($fieldValue as $i) {
+                 $this->addHeader(Header\GenericMultiHeader::fromString($headerFieldNameOrLine . ':' . $i));
+@@ -466,6 +470,19 @@ class Headers implements Countable, Iterator
+     }
+     /**
++     * Create Header object from header line
++     *
++     * @param string $headerLine
++     * @return Header\HeaderInterface|Header\HeaderInterface[]
++     */
++    public function loadHeader($headerLine)
++    {
++        list($name, ) = Header\GenericHeader::splitHeaderLine($headerLine);
++        $class = $this->getPluginClassLoader()->load($name) ?: Header\GenericHeader::class;
++        return $class::fromString($headerLine);
++    }
++
++    /**
+      * @param $index
+      * @return mixed
+      */
+
+commit c3ac503689ffd00ac51e43c97c311e8753ecd32c
+Author: Elan Ruusamäe <glen@delfi.ee>
+Date:   Tue Jun 13 00:54:18 2017 +0300
+
+    fix MessageId having double brackets
+    
+    this got broken from pull/86 when header lazyloading was omitted
+
+diff --git a/src/Header/MessageId.php b/src/Header/MessageId.php
+index 850757ea..03c52a75 100644
+--- a/src/Header/MessageId.php
++++ b/src/Header/MessageId.php
+@@ -27,7 +27,7 @@ class MessageId implements HeaderInterface
+         }
+         $header = new static();
+-        $header->setId($value);
++        $header->setId(trim($value, '<>'));
+         return $header;
+     }
+
+commit 63ac228e6f883ed8e26a7b8a02130348e2332edf
+Author: Elan Ruusamäe <glen@delfi.ee>
+Date:   Wed Jun 28 00:19:11 2017 +0300
+
+    skip lazy-load for array as well
+    
+    refs:
+    - a4a93ef0
+    - ddf2e8ec
+    
+    this should be sent upstream, but upstream doesn't seem to respond even
+    to trivial pull-requests.
+
+diff --git a/src/Headers.php b/src/Headers.php
+index eac2bf9f..d4f9a9e7 100644
+--- a/src/Headers.php
++++ b/src/Headers.php
+@@ -207,9 +207,6 @@ class Headers implements Countable, Iterator
+     /**
+      * Add a raw header line, either in name => value, or as a single string 'name: value'
+      *
+-     * This method allows for lazy-loading in that the parsing and instantiation of HeaderInterface object
+-     * will be delayed until they are retrieved by either get() or current()
+-     *
+      * @throws Exception\InvalidArgumentException
+      * @param  string $headerFieldNameOrLine
+      * @param  string $fieldValue optional
+@@ -238,7 +235,9 @@ class Headers implements Countable, Iterator
+                 $this->addHeader(Header\GenericMultiHeader::fromString($headerFieldNameOrLine . ':' . $i));
+             }
+         } else {
+-            $this->addHeader(Header\GenericHeader::fromString($headerFieldNameOrLine . ':' . $fieldValue));
++            $class = $this->getPluginClassLoader()->load($headerFieldNameOrLine) ?: Header\GenericHeader::class;
++            $header = $class::fromString($headerFieldNameOrLine . ':' . $fieldValue);
++            $this->addHeader($header);
+         }
+         return $this;
This page took 0.123689 seconds and 4 git commands to generate.