Make WordPress Core

Ticket #51874: 51874.patch

File 51874.patch, 12.9 KB (added by ayeshrajans, 4 years ago)

Tests: https://travis-ci.com/github/Ayesh/wordpress-develop/builds/204326555. Similar to the previous updates, we keep three hunks where we force-ignore phpcs checks. This patch updates to the the otherwise identical copy from upstream 6.2.0 tag.

  • src/wp-includes/PHPMailer/Exception.php

    commit 2d5f609d0733785604d4447576edc11f3b39d08a
    Author: Ayesh Karunaratne <ayesh@ayesh.me>
    Date:   Thu Nov 26 00:15:23 2020 +0700
    
        PHPMailer 6.2.0
    
    diff --git a/src/wp-includes/PHPMailer/Exception.php b/src/wp-includes/PHPMailer/Exception.php
    index e7807fc2ca..a50a8991f7 100644
    a b  
    11<?php
     2
    23/**
    34 * PHPMailer Exception class.
    45 * PHP Version 5.5.
  • src/wp-includes/PHPMailer/PHPMailer.php

    diff --git a/src/wp-includes/PHPMailer/PHPMailer.php b/src/wp-includes/PHPMailer/PHPMailer.php
    index 7e9f834bc8..31646b2a84 100644
    a b  
    11<?php
     2
    23/**
    34 * PHPMailer - PHP email creation and transport class.
    45 * PHP Version 5.5.
    class PHPMailer 
    388389     * SMTP class debug output mode.
    389390     * Debug output level.
    390391     * Options:
    391      * * SMTP::DEBUG_OFF: No output
    392      * * SMTP::DEBUG_CLIENT: Client messages
    393      * * SMTP::DEBUG_SERVER: Client and server messages
    394      * * SMTP::DEBUG_CONNECTION: As SERVER plus connection status
    395      * * SMTP::DEBUG_LOWLEVEL: Noisy, low-level data output, rarely needed
     392     * @see SMTP::DEBUG_OFF: No output
     393     * @see SMTP::DEBUG_CLIENT: Client messages
     394     * @see SMTP::DEBUG_SERVER: Client and server messages
     395     * @see SMTP::DEBUG_CONNECTION: As SERVER plus connection status
     396     * @see SMTP::DEBUG_LOWLEVEL: Noisy, low-level data output, rarely needed
    396397     *
    397398     * @see SMTP::$do_debug
    398399     *
    class PHPMailer 
    747748     *
    748749     * @var string
    749750     */
    750     const VERSION = '6.1.8';
     751    const VERSION = '6.2.0';
    751752
    752753    /**
    753754     * Error severity: message only, continue processing.
    public static function parseAddresses($addrstr, $useimap = true) 
    11851186            //Use this built-in parser if it's available
    11861187            $list = imap_rfc822_parse_adrlist($addrstr, '');
    11871188            foreach ($list as $address) {
    1188                 if (('.SYNTAX-ERROR.' !== $address->host) && static::validateAddress(
    1189                     $address->mailbox . '@' . $address->host
    1190                 )) {
     1189                if (
     1190                    ('.SYNTAX-ERROR.' !== $address->host) && static::validateAddress(
     1191                        $address->mailbox . '@' . $address->host
     1192                    )
     1193                ) {
    11911194                    $addresses[] = [
    11921195                        'name' => (property_exists($address, 'personal') ? $address->personal : ''),
    11931196                        'address' => $address->mailbox . '@' . $address->host,
    public function setFrom($address, $name = '', $auto = true) 
    12411244        $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
    12421245        // Don't validate now addresses with IDN. Will be done in send().
    12431246        $pos = strrpos($address, '@');
    1244         if ((false === $pos)
     1247        if (
     1248            (false === $pos)
    12451249            || ((!$this->has8bitChars(substr($address, ++$pos)) || !static::idnSupported())
    12461250            && !static::validateAddress($address))
    12471251        ) {
    public function punyencodeAddress($address) 
    13931397    {
    13941398        // Verify we have required functions, CharSet, and at-sign.
    13951399        $pos = strrpos($address, '@');
    1396         if (!empty($this->CharSet) &&
     1400        if (
     1401            !empty($this->CharSet) &&
    13971402            false !== $pos &&
    13981403            static::idnSupported()
    13991404        ) {
    public function send() 
    14571462     */
    14581463    public function preSend()
    14591464    {
    1460         if ('smtp' === $this->Mailer
    1461             || ('mail' === $this->Mailer && stripos(PHP_OS, 'WIN') === 0)
     1465        if (
     1466            'smtp' === $this->Mailer
     1467            || ('mail' === $this->Mailer && (PHP_VERSION_ID >= 80000 || stripos(PHP_OS, 'WIN') === 0))
    14621468        ) {
    14631469            //SMTP mandates RFC-compliant line endings
    14641470            //and it's also used with mail() on Windows
    public function preSend() 
    14681474            static::setLE(PHP_EOL);
    14691475        }
    14701476        //Check for buggy PHP versions that add a header with an incorrect line break
    1471         if ('mail' === $this->Mailer
     1477        if (
     1478            'mail' === $this->Mailer
    14721479            && ((PHP_VERSION_ID >= 70000 && PHP_VERSION_ID < 70017)
    14731480                || (PHP_VERSION_ID >= 70100 && PHP_VERSION_ID < 70103))
    14741481            && ini_get('mail.add_x_header') === '1'
    public function preSend() 
    15551562            }
    15561563
    15571564            // Sign with DKIM if enabled
    1558             if (!empty($this->DKIM_domain)
     1565            if (
     1566                !empty($this->DKIM_domain)
    15591567                && !empty($this->DKIM_selector)
    15601568                && (!empty($this->DKIM_private_string)
    15611569                    || (!empty($this->DKIM_private)
    public function postSend() 
    16131621            }
    16141622        } catch (Exception $exc) {
    16151623            if ($this->Mailer === 'smtp' && $this->SMTPKeepAlive == true) {
    1616               $this->smtp->reset();
     1624                $this->smtp->reset();
    16171625            }
    16181626            $this->setError($exc->getMessage());
    16191627            $this->edebug($exc->getMessage());
    protected function sendmailSend($header, $body) 
    17191727    protected static function isShellSafe($string)
    17201728    {
    17211729        // Future-proof
    1722         if (escapeshellcmd($string) !== $string
     1730        if (
     1731            escapeshellcmd($string) !== $string
    17231732            || !in_array(escapeshellarg($string), ["'$string'", "\"$string\""])
    17241733        ) {
    17251734            return false;
    protected function smtpSend($header, $body) 
    19031912                    $isSent = true;
    19041913                }
    19051914
    1906                 $callbacks[] = ['issent'=>$isSent, 'to'=>$to[0]];
     1915                $callbacks[] = ['issent' => $isSent, 'to' => $to[0]];
    19071916            }
    19081917        }
    19091918
    public function smtpConnect($options = null) 
    19831992
    19841993        foreach ($hosts as $hostentry) {
    19851994            $hostinfo = [];
    1986             if (!preg_match(
    1987                 '/^(?:(ssl|tls):\/\/)?(.+?)(?::(\d+))?$/',
    1988                 trim($hostentry),
    1989                 $hostinfo
    1990             )) {
     1995            if (
     1996                !preg_match(
     1997                    '/^(?:(ssl|tls):\/\/)?(.+?)(?::(\d+))?$/',
     1998                    trim($hostentry),
     1999                    $hostinfo
     2000                )
     2001            ) {
    19912002                $this->edebug($this->lang('invalid_hostentry') . ' ' . trim($hostentry));
    19922003                // Not a valid host entry
    19932004                continue;
    public function smtpConnect($options = null) 
    20562067                        // We must resend EHLO after TLS negotiation
    20572068                        $this->smtp->hello($hello);
    20582069                    }
    2059                     if ($this->SMTPAuth && !$this->smtp->authenticate(
    2060                         $this->Username,
    2061                         $this->Password,
    2062                         $this->AuthType,
    2063                         $this->oauth
    2064                     )) {
     2070                    if (
     2071                        $this->SMTPAuth && !$this->smtp->authenticate(
     2072                            $this->Username,
     2073                            $this->Password,
     2074                            $this->AuthType,
     2075                            $this->oauth
     2076                        )
     2077                    ) {
    20652078                        throw new Exception($this->lang('authenticate'));
    20662079                    }
    20672080
    public function setLanguage($langcode = 'en', $lang_path = '') 
    21192132            'am' => 'hy',
    21202133        ];
    21212134
    2122         if (isset($renamed_langcodes[$langcode])) {
     2135        if (array_key_exists($langcode, $renamed_langcodes)) {
    21232136            $langcode = $renamed_langcodes[$langcode];
    21242137        }
    21252138
    public function createHeader() 
    24282441        }
    24292442
    24302443        // sendmail and mail() extract Bcc from the header before sending
    2431         if ((
     2444        if (
     2445            (
    24322446                'sendmail' === $this->Mailer || 'qmail' === $this->Mailer || 'mail' === $this->Mailer
    24332447            )
    24342448            && count($this->bcc) > 0
    protected function serverHostname() 
    38983912    public static function isValidHost($host)
    38993913    {
    39003914        //Simple syntax limits
    3901         if (empty($host)
     3915        if (
     3916            empty($host)
    39023917            || !is_string($host)
    39033918            || strlen($host) > 256
    39043919            || !preg_match('/^([a-zA-Z\d.-]*|\[[a-fA-F\d:]+])$/', $host)
    public function msgHTML($message, $basedir = '', $advanced = false) 
    40644079                    );
    40654080                    continue;
    40664081                }
    4067                 if (// Only process relative URLs if a basedir is provided (i.e. no absolute local paths)
     4082                if (
     4083                    // Only process relative URLs if a basedir is provided (i.e. no absolute local paths)
    40684084                    !empty($basedir)
    40694085                    // Ignore URLs containing parent dir traversal (..)
    40704086                    && (strpos($url, '..') === false)
    public function msgHTML($message, $basedir = '', $advanced = false) 
    40864102                    if (strlen($directory) > 1 && '/' !== substr($directory, -1)) {
    40874103                        $directory .= '/';
    40884104                    }
    4089                     if ($this->addEmbeddedImage(
    4090                         $basedir . $directory . $filename,
    4091                         $cid,
    4092                         $filename,
    4093                         static::ENCODING_BASE64,
    4094                         static::_mime_types((string) static::mb_pathinfo($filename, PATHINFO_EXTENSION))
    4095                     )
     4105                    if (
     4106                        $this->addEmbeddedImage(
     4107                            $basedir . $directory . $filename,
     4108                            $cid,
     4109                            $filename,
     4110                            static::ENCODING_BASE64,
     4111                            static::_mime_types((string) static::mb_pathinfo($filename, PATHINFO_EXTENSION))
     4112                        )
    40964113                    ) {
    40974114                        $message = preg_replace(
    40984115                            '/' . $images[1][$imgindex] . '=["\']' . preg_quote($url, '/') . '["\']/Ui',
    public function DKIM_Sign($signHeader) 
    45114528            $privKey = openssl_pkey_get_private($privKeyStr);
    45124529        }
    45134530        if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) {
    4514             openssl_pkey_free($privKey);
     4531            if (PHP_MAJOR_VERSION < 8) {
     4532                openssl_pkey_free($privKey);
     4533            }
    45154534
    45164535            return base64_encode($signature);
    45174536        }
    4518         openssl_pkey_free($privKey);
     4537        if (PHP_MAJOR_VERSION < 8) {
     4538            openssl_pkey_free($privKey);
     4539        }
    45194540
    45204541        return '';
    45214542    }
  • src/wp-includes/PHPMailer/SMTP.php

    diff --git a/src/wp-includes/PHPMailer/SMTP.php b/src/wp-includes/PHPMailer/SMTP.php
    index 9e43dce2a5..ab7f46e4c8 100644
    a b  
    11<?php
     2
    23/**
    34 * PHPMailer RFC821 SMTP email transport class.
    45 * PHP Version 5.5.
    class SMTP 
    3435     *
    3536     * @var string
    3637     */
    37     const VERSION = '6.1.8';
     38    const VERSION = '6.2.0';
    3839
    3940    /**
    4041     * SMTP line break constant.
    public function authenticate( 
    539540                    return false;
    540541                }
    541542                // Send encoded username and password
    542                 if (!$this->sendCommand(
    543                     'User & Password',
    544                     base64_encode("\0" . $username . "\0" . $password),
    545                     235
    546                 )
     543                if (
     544                    !$this->sendCommand(
     545                        'User & Password',
     546                        base64_encode("\0" . $username . "\0" . $password),
     547                        235
     548                    )
    547549                ) {
    548550                    return false;
    549551                }
    public function client_send($data, $command = '') 
    10861088    {
    10871089        //If SMTP transcripts are left enabled, or debug output is posted online
    10881090        //it can leak credentials, so hide credentials in all but lowest level
    1089         if (self::DEBUG_LOWLEVEL > $this->do_debug &&
    1090             in_array($command, ['User & Password', 'Username', 'Password'], true)) {
     1091        if (
     1092            self::DEBUG_LOWLEVEL > $this->do_debug &&
     1093            in_array($command, ['User & Password', 'Username', 'Password'], true)
     1094        ) {
    10911095            $this->edebug('CLIENT -> SERVER: [credentials hidden]', self::DEBUG_CLIENT);
    10921096        } else {
    10931097            $this->edebug('CLIENT -> SERVER: ' . $data, self::DEBUG_CLIENT);
    protected function get_lines() 
    12071211                    self::DEBUG_LOWLEVEL
    12081212                );
    12091213
    1210                 //stream_select returns false when the `select` system call is interrupted by an incoming signal, try the select again
     1214                //stream_select returns false when the `select` system call is interrupted
     1215                //by an incoming signal, try the select again
    12111216                if (stripos($message, 'interrupted system call') !== false) {
    12121217                    $this->edebug(
    12131218                        'SMTP -> get_lines(): retrying stream_select',