WordPress.org

Make WordPress Core


Ignore:
Timestamp:
09/12/2019 02:36:42 PM (2 months ago)
Author:
SergeyBiryukov
Message:

Mail: Update PHPMailer to 5.2.27.

The full list of changes is available here:
https://github.com/PHPMailer/PHPMailer/compare/v5.2.22...PHPMailer:v5.2.27

Props MattyRob, ayeshrajans, rogueresearch, bgermann, slaFFik, Presskopp, aaroncampbell.
Fixes #40472.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-phpmailer.php

    r39759 r46097  
    3232     * @var string
    3333     */
    34     public $Version = '5.2.22';
     34    public $Version = '5.2.27';
    3535
    3636    /**
     
    441441     * Parameters:
    442442     *   boolean $result        result of the send action
    443      *   string  $to            email address of the recipient
    444      *   string  $cc            cc email addresses
    445      *   string  $bcc           bcc email addresses
     443     *   array   $to            email addresses of the recipients
     444     *   array   $cc            cc email addresses
     445     *   array   $bcc           bcc email addresses
    446446     *   string  $subject       the subject
    447447     *   string  $body          the email body
     
    660660            $this->exceptions = (boolean)$exceptions;
    661661        }
     662        //Pick an appropriate debug output format automatically
     663        $this->Debugoutput = (strpos(PHP_SAPI, 'cli') !== false ? 'echo' : 'html');
    662664    }
    663665
     
    12951297            // Sign with DKIM if enabled
    12961298            if (!empty($this->DKIM_domain)
    1297                 && !empty($this->DKIM_selector)
    1298                 && (!empty($this->DKIM_private_string)
    1299                    || (!empty($this->DKIM_private) && file_exists($this->DKIM_private))
     1299                and !empty($this->DKIM_selector)
     1300                and (!empty($this->DKIM_private_string)
     1301                    or (!empty($this->DKIM_private)
     1302                        and self::isPermittedPath($this->DKIM_private)
     1303                        and file_exists($this->DKIM_private)
     1304                    )
    13001305                )
    13011306            ) {
     
    14631468
    14641469    /**
     1470     * Check whether a file path is of a permitted type.
     1471     * Used to reject URLs and phar files from functions that access local file paths,
     1472     * such as addAttachment.
     1473     * @param string $path A relative or absolute path to a file.
     1474     * @return bool
     1475     */
     1476    protected static function isPermittedPath($path)
     1477    {
     1478        return !preg_match('#^[a-z]+://#i', $path);
     1479    }
     1480
     1481    /**
    14651482     * Send mail using the PHP mail() function.
    14661483     * @param string $header The message headers
     
    16241641        foreach ($hosts as $hostentry) {
    16251642            $hostinfo = array();
    1626             if (!preg_match('/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*):?([0-9]*)$/', trim($hostentry), $hostinfo)) {
     1643            if (!preg_match(
     1644                '/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*|\[[a-fA-F0-9:]+\]):?([0-9]*)$/',
     1645                trim($hostentry),
     1646                $hostinfo
     1647            )) {
    16271648                // Not a valid host entry
     1649                $this->edebug('Ignoring invalid host: ' . $hostentry);
    16281650                continue;
    16291651            }
     
    17441766            'no' => 'nb',
    17451767            'se' => 'sv',
     1768            'sr' => 'rs'
    17461769        );
    17471770
     
    17851808        if ($langcode != 'en') {
    17861809            // Make sure language file path is readable
    1787             if (!is_readable($lang_file)) {
     1810            if (!self::isPermittedPath($lang_file) or !is_readable($lang_file)) {
    17881811                $foundlang = false;
    17891812            } else {
     
    20262049        $result = '';
    20272050
    2028         if ($this->MessageDate == '') {
    2029             $this->MessageDate = self::rfcDate();
    2030         }
    2031         $result .= $this->headerLine('Date', $this->MessageDate);
     2051        $result .= $this->headerLine('Date', $this->MessageDate == '' ? self::rfcDate() : $this->MessageDate);
    20322052
    20332053        // To be created automatically by mail()
     
    24962516     * Never use a user-supplied path to a file!
    24972517     * Returns false if the file could not be found or read.
     2518     * Explicitly *does not* support passing URLs; PHPMailer is not an HTTP client.
     2519     * If you need to do that, fetch the resource yourself and pass it in via a local file or string.
    24982520     * @param string $path Path to the attachment.
    24992521     * @param string $name Overrides the attachment name.
     
    25072529    {
    25082530        try {
    2509             if (!@is_file($path)) {
     2531            if (!self::isPermittedPath($path) or !@is_file($path)) {
    25102532                throw new phpmailerException($this->lang('file_access') . $path, self::STOP_CONTINUE);
    25112533            }
     
    26882710    {
    26892711        try {
    2690             if (!is_readable($path)) {
     2712            if (!self::isPermittedPath($path) or !file_exists($path)) {
    26912713                throw new phpmailerException($this->lang('file_open') . $path, self::STOP_CONTINUE);
    26922714            }
     
    30323054    public function addEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = '', $disposition = 'inline')
    30333055    {
    3034         if (!@is_file($path)) {
     3056        if (!self::isPermittedPath($path) or !@is_file($path)) {
    30353057            $this->setError($this->lang('file_access') . $path);
    30363058            return false;
     
    40354057    public function errorMessage()
    40364058    {
    4037         $errorMsg = '<strong>' . $this->getMessage() . "</strong><br />\n";
     4059        $errorMsg = '<strong>' . htmlspecialchars($this->getMessage()) . "</strong><br />\n";
    40384060        return $errorMsg;
    40394061    }
Note: See TracChangeset for help on using the changeset viewer.