WordPress.org

Make WordPress Core

Ticket #30266: 30266.3.diff

File 30266.3.diff, 4.3 KB (added by valendesigns, 5 years ago)
  • src/wp-includes/pluggable.php

    diff --git src/wp-includes/pluggable.php src/wp-includes/pluggable.php
    index 3d7e763..fcb44e1 100644
    function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() 
    303303                                        // Mainly for legacy -- process a From: header if it's there
    304304                                        case 'from':
    305305                                                if ( strpos($content, '<' ) !== false ) {
    306                                                         // So... making my life hard again?
    307                                                         $from_name = substr( $content, 0, strpos( $content, '<' ) - 1 );
    308                                                         $from_name = str_replace( '"', '', $from_name );
    309                                                         $from_name = trim( $from_name );
     306                                                        // Avoid setting an empty $from_name
     307                                                        if ( strpos( $content, '<' ) !== 0 ) {
     308                                                                $from_name = substr( $content, 0, strpos( $content, '<' ) - 1 );
     309                                                                $from_name = str_replace( '"', '', $from_name );
     310                                                                $from_name = trim( $from_name );
     311                                                        }
    310312
    311313                                                        $from_email = substr( $content, strpos( $content, '<' ) + 1 );
    312314                                                        $from_email = str_replace( '>', '', $from_email );
    313315                                                        $from_email = trim( $from_email );
    314                                                 } else {
     316
     317                                                // Avoid setting an empty $from_email
     318                                                } elseif ( '' !== trim( $content ) ) {
    315319                                                        $from_email = trim( $content );
    316320                                                }
    317321                                                break;
    318322                                        case 'content-type':
    319323                                                if ( strpos( $content, ';' ) !== false ) {
    320                                                         list( $type, $charset ) = explode( ';', $content );
     324                                                        list( $type, $charset_content ) = explode( ';', $content );
    321325                                                        $content_type = trim( $type );
    322                                                         if ( false !== stripos( $charset, 'charset=' ) ) {
    323                                                                 $charset = trim( str_replace( array( 'charset=', '"' ), '', $charset ) );
    324                                                         } elseif ( false !== stripos( $charset, 'boundary=' ) ) {
    325                                                                 $boundary = trim( str_replace( array( 'BOUNDARY=', 'boundary=', '"' ), '', $charset ) );
     326                                                        if ( false !== stripos( $charset_content, 'charset=' ) ) {
     327                                                                $charset = trim( str_replace( array( 'charset=', '"' ), '', $charset_content ) );
     328                                                        } elseif ( false !== stripos( $charset_content, 'boundary=' ) ) {
     329                                                                $boundary = trim( str_replace( array( 'BOUNDARY=', 'boundary=', '"' ), '', $charset_content ) );
    326330                                                                $charset = '';
    327331                                                        }
    328                                                 } else {
     332
     333                                                // Avoid setting an empty $content_type
     334                                                } elseif ( '' !== trim( $content ) ) {
    329335                                                        $content_type = trim( $content );
    330336                                                }
    331337                                                break;
  • tests/phpunit/tests/mail.php

    diff --git tests/phpunit/tests/mail.php tests/phpunit/tests/mail.php
    index 2ca73dd..7f3fbad 100644
    class Tests_Mail extends WP_UnitTestCase { 
    156156                // Fatal errors
    157157                $this->assertFalse( wp_mail( 'invalid.address', 'subject', 'body', '', array() ) );
    158158        }
     159
     160        /**
     161         * @ticket 30266
     162         */
     163        function test_wp_mail_with_empty_from_header() {
     164                $to       = "address@tld.com";
     165                $subject  = "Testing";
     166                $message  = "Test Message";
     167                $headers  = "From: ";
     168                $expected = "From: WordPress <wordpress@example.com>";
     169
     170                wp_mail( $to, $subject, $message, $headers );
     171
     172                $this->assertTrue( strpos( $GLOBALS['phpmailer']->mock_sent[0]['header'], $expected ) > 0 );
     173        }
     174
     175        /**
     176         * @ticket 30266
     177         */
     178        function test_wp_mail_with_empty_from_name_for_the_from_header() {
     179                $to       = "address@tld.com";
     180                $subject  = "Testing";
     181                $message  = "Test Message";
     182                $headers  = "From: <wordpress@example.com>";
     183                $expected = "From: WordPress <wordpress@example.com>";
     184
     185                wp_mail( $to, $subject, $message, $headers );
     186
     187                $this->assertTrue( strpos( $GLOBALS['phpmailer']->mock_sent[0]['header'], $expected ) > 0 );
     188        }
     189
     190        /**
     191         * @ticket 30266
     192         */
     193        function test_wp_mail_with_empty_content_type_header() {
     194                $to       = "address@tld.com";
     195                $subject  = "Testing";
     196                $message  = "Test Message";
     197                $headers  = "Content-Type: ";
     198                $expected = "Content-Type: text/plain; charset=UTF-8";
     199
     200                wp_mail( $to, $subject, $message, $headers );
     201
     202                $this->assertTrue( strpos( $GLOBALS['phpmailer']->mock_sent[0]['header'], $expected ) > 0 );
     203        }
     204
     205        /**
     206         * @ticket 30266
     207         */
     208        function test_wp_mail_with_empty_charset_for_the_content_type_header() {
     209                $to       = "address@tld.com";
     210                $subject  = "Testing";
     211                $message  = "Test Message";
     212                $headers  = "Content-Type: text/plain;";
     213                $expected = "Content-Type: text/plain; charset=UTF-8";
     214
     215                wp_mail( $to, $subject, $message, $headers );
     216
     217                $this->assertTrue( strpos( $GLOBALS['phpmailer']->mock_sent[0]['header'], $expected ) > 0 );
     218        }
    159219}