Make WordPress Core


Ignore:
Timestamp:
02/25/2022 01:46:23 PM (2 years ago)
Author:
SergeyBiryukov
Message:

Code Modernization: Check the return type of wp_parse_url() in wp_mail().

As per the PHP manual:

If the component parameter is omitted, an associative array is returned.
If the component parameter is specified, parse_url() returns a string (or an int, in the case of PHP_URL_PORT) instead of an array. If the requested component doesn't exist within the given URL, null will be returned.

Reference: PHP Manual: parse_url(): Return Values

In PHP 8.1, if the home URL does not have a "host" component, it would lead to a substr(): Passing null to parameter #1 ($string) of type string is deprecated notice.

Changing the logic around and adding validation for the return type value of wp_parse_url() prevents that.

Follow-up to [48601], [51606], [51622], [51626], [51629], [51630].

Props dennisatyoast, jrf.
See #54730.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/mail.php

    r52010 r52799  
    227227
    228228    /**
     229     * Tests that wp_mail() returns false with an empty home URL and does not error out on PHP 8.1.
     230     *
     231     * @ticket 54730
     232     */
     233    public function test_wp_mail_with_empty_home_url() {
     234        $to      = 'address@tld.com';
     235        $subject = 'Testing';
     236        $message = 'Test Message';
     237
     238        // Multisite test runs.
     239        add_filter( 'network_home_url', '__return_empty_string' );
     240
     241        // Single site test runs.
     242        add_filter( 'home_url', '__return_empty_string' );
     243
     244        $success = wp_mail( $to, $subject, $message );
     245
     246        $this->assertFalse( $success, 'wp_mail() should have returned false' );
     247        $this->assertGreaterThan( 0, did_action( 'wp_mail_failed' ), 'wp_mail_failed action was not called' );
     248    }
     249
     250    /**
    229251     * @ticket 30266
    230252     */
Note: See TracChangeset for help on using the changeset viewer.