Make WordPress Core

Changeset 53900


Ignore:
Timestamp:
08/16/2022 06:16:43 PM (22 months ago)
Author:
desrosj
Message:

Mail: Prevent the last character of names in “From” headers from being trimmed.

When extracting the email and name from a “From” header, the last character of the name is incorrectly trimmed when a space is not included between the name and the opening <.

Though the space is required for the header to be compliant with RFC5322 (see https://www.rfc-editor.org/rfc/rfc5322#section-3.4), the absence of a space can be ignored here. PHPMailer accepts the name and email as separate parameters and constructs the header correctly later on.

Props hakanca, mikehansenme, SergeyBiryukov, kovshenin, mattyrob, drewapicture, desrosj.
Fixes #19847.

Location:
trunk
Files:
2 edited

Legend:

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

    r53827 r53900  
    308308                                // Text before the bracketed email is the "From" name.
    309309                                if ( $bracket_pos > 0 ) {
    310                                     $from_name = substr( $content, 0, $bracket_pos - 1 );
     310                                    $from_name = substr( $content, 0, $bracket_pos );
    311311                                    $from_name = str_replace( '"', '', $from_name );
    312312                                    $from_name = trim( $from_name );
  • trunk/tests/phpunit/tests/mail.php

    r52800 r53900  
    195195
    196196    /**
     197     * @ticket 19847
     198     */
     199    public function test_wp_mail_with_from_header_missing_space() {
     200        $to        = 'address@tld.com';
     201        $subject   = 'Testing';
     202        $message   = 'Test Message';
     203        $from      = 'bar@example.com';
     204        $from_name = 'Foo';
     205        $headers   = "From: {$from_name}<{$from}>";
     206        $corrected = "From: {$from_name} <{$from}>";
     207
     208        wp_mail( $to, $subject, $message, $headers );
     209
     210        $mailer = tests_retrieve_phpmailer_instance();
     211        // phpcs:disable WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase
     212        $this->assertSame( $from, $mailer->From );
     213        $this->assertSame( $from_name, $mailer->FromName );
     214        // phpcs:enable
     215        $this->assertStringContainsString( $corrected, $mailer->get_sent()->header );
     216    }
     217
     218    /**
    197219     * @ticket 30266
    198220     */
Note: See TracChangeset for help on using the changeset viewer.