WordPress.org

Make WordPress Core

Ticket #30266: 30266.1.diff

File 30266.1.diff, 4.2 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 0fe8ab8..1dcdddc 100644
    function wp_mail( $to, $subject, $message, $headers = '', $attachments = array() 
    304304                                        case 'from':
    305305                                                if ( strpos($content, '<' ) !== false ) {
    306306                                                        // 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 );
     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                                                } else if ( '' !== trim( $content ) ) {
    315317                                                        $from_email = trim( $content );
    316318                                                }
    317319                                                break;
    318320                                        case 'content-type':
    319321                                                if ( strpos( $content, ';' ) !== false ) {
    320                                                         list( $type, $charset ) = explode( ';', $content );
     322                                                        list( $type, $charset_content ) = explode( ';', $content );
    321323                                                        $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 ) );
     324                                                        if ( false !== stripos( $charset_content, 'charset=' ) ) {
     325                                                                $charset = trim( str_replace( array( 'charset=', '"' ), '', $charset_content ) );
     326                                                        } elseif ( false !== stripos( $charset_content, 'boundary=' ) ) {
     327                                                                $boundary = trim( str_replace( array( 'BOUNDARY=', 'boundary=', '"' ), '', $charset_content ) );
    326328                                                                $charset = '';
    327329                                                        }
    328                                                 } else {
     330                                                } else if ( '' !== trim( $content ) ) {
    329331                                                        $content_type = trim( $content );
    330332                                                }
    331333                                                break;
  • tests/phpunit/tests/mail.php

    diff --git tests/phpunit/tests/mail.php tests/phpunit/tests/mail.php
    index 547ed99..e9a6169 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
     169                wp_mail( $to, $subject, $message, $headers );
     170
     171                preg_match( "/From:(.*)/i", trim( $GLOBALS['phpmailer']->mock_sent[0]['header'] ), $matches );
     172
     173                $this->assertEquals( 'WordPress <wordpress@example.com>', trim( $matches[1] ) );
     174        }
     175
     176        /**
     177         * @ticket 30266
     178         */
     179        function test_wp_mail_with_empty_from_name_for_the_from_header() {
     180                $to = "<address@tld.com>";
     181                $subject = "Testing";
     182                $message = "Test Message";
     183                $headers = "From: <wordpress@example.com>";
     184
     185                wp_mail( $to, $subject, $message, $headers );
     186
     187                preg_match( "/From:(.*)/i", trim( $GLOBALS['phpmailer']->mock_sent[0]['header'] ), $matches );
     188
     189                $this->assertEquals( 'WordPress <wordpress@example.com>', trim( $matches[1] ) );
     190        }
     191
     192        /**
     193         * @ticket 30266
     194         */
     195        function test_wp_mail_with_empty_content_type_header() {
     196                $to = "<address@tld.com>";
     197                $subject = "Testing";
     198                $message = "Test Message";
     199                $headers = "Content-Type: ";
     200
     201                wp_mail( $to, $subject, $message, $headers );
     202
     203                preg_match( "/Content-Type:(.*)/i", trim( $GLOBALS['phpmailer']->mock_sent[0]['header'] ), $matches );
     204
     205                $this->assertEquals( 'text/plain; charset=UTF-8', trim( $matches[1] ) );
     206        }
     207
     208        /**
     209         * @ticket 30266
     210         */
     211        function test_wp_mail_with_empty_charset_for_the_content_type_header() {
     212                $to = "<address@tld.com>";
     213                $subject = "Testing";
     214                $message = "Test Message";
     215                $headers = "Content-Type: text/plain;";
     216
     217                wp_mail( $to, $subject, $message, $headers );
     218
     219                preg_match( "/Content-Type:(.*)/i", trim( $GLOBALS['phpmailer']->mock_sent[0]['header'] ), $matches );
     220
     221                $this->assertEquals( 'text/plain; charset=UTF-8', trim( $matches[1] ) );
     222        }
    159223}