Make WordPress Core

Ticket #40472: 45838-phpmailer-5-2-27-upgrade.patch

File 45838-phpmailer-5-2-27-upgrade.patch, 6.6 KB (added by ayeshrajans, 6 years ago)

Hello everyone, This is rather clean patch of PHPMailer v5.2.22...v5.2.27.

  • src/wp-includes/class-phpmailer.php

    diff --git a/src/wp-includes/class-phpmailer.php b/src/wp-includes/class-phpmailer.php
    index 7f5e353578..8772db2842 100644
    a b class PHPMailer 
    3131     * The PHPMailer Version number.
    3232     * @var string
    3333     */
    34     public $Version = '5.2.22';
     34    public $Version = '5.2.27';
    3535
    3636    /**
    3737     * Email priority.
    class PHPMailer 
    440440     *
    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
    448448     *   string  $from          email address of sender
    public function __construct($exceptions = null) 
    659659        if ($exceptions !== null) {
    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
    664666    /**
    public function preSend() 
    12941296
    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            ) {
    13021307                $header_dkim = $this->DKIM_Add(
    protected static function isShellSafe($string) 
    14611466        return true;
    14621467    }
    14631468
     1469    /**
     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
    14641481    /**
    14651482     * Send mail using the PHP mail() function.
    14661483     * @param string $header The message headers
    public function smtpConnect($options = null) 
    16231640
    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            }
    16301652            // $hostinfo[2]: optional ssl or tls prefix
    public function setLanguage($langcode = 'en', $lang_path = '') 
    17431765            'dk' => 'da',
    17441766            'no' => 'nb',
    17451767            'se' => 'sv',
     1768            'sr' => 'rs'
    17461769        );
    17471770
    17481771        if (isset($renamed_langcodes[$langcode])) {
    public function setLanguage($langcode = 'en', $lang_path = '') 
    17841807        // There is no English translation file
    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 {
    17901813                // Overwrite language-specific strings.
    public function createHeader() 
    20252048    {
    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()
    20342054        if ($this->SingleTo) {
    public function textLine($value) 
    24952515     * Add an attachment from a path on the filesystem.
    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.
    25002522     * @param string $encoding File encoding (see $Encoding).
    public function textLine($value) 
    25062528    public function addAttachment($path, $name = '', $encoding = 'base64', $type = '', $disposition = 'attachment')
    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            }
    25122534
    protected function attachAll($disposition_type, $boundary) 
    26872709    protected function encodeFile($path, $encoding = 'base64')
    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            }
    26932715            $magic_quotes = get_magic_quotes_runtime();
    public function addStringAttachment( 
    30313053     */
    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;
    30373059        }
    class phpmailerException extends Exception 
    40344056     */
    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    }
    40404062}