Make WordPress Core


Ignore:
Timestamp:
10/01/2022 03:23:41 AM (3 years ago)
Author:
SergeyBiryukov
Message:

Code Modernization: Check the return type of parse_url() in url_to_postid().

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 this case, parse_url() is called with PHP_URL_HOST as $component, which returns null if the URL only has a path. The return value of parse_url() was then passed to str_replace(), leading to a notice on PHP 8.1:

str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated

Adding validation for the return type value of parse_url() prevents that.

This commit addresses a few errors in the test suite along the lines of:

5) Tests_Rewrite::test_url_to_postid_home_has_path
str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated

/var/www/src/wp-includes/rewrite.php:503
/var/www/tests/phpunit/tests/rewrite.php:271
/var/www/vendor/bin/phpunit:123

Includes adding a dedicated unit test for a URL that only has a path.

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

Props jrf, aristath, poena, justinahinon, SergeyBiryukov.
See #55656.

File:
1 edited

Legend:

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

    r53942 r54364  
    256256    }
    257257
    258     public function test_url_to_postid_home_has_path() {
    259 
     258    /**
     259     * @covers ::url_to_postid
     260     */
     261    public function test_url_to_postid_url_has_only_path() {
     262        $this->assertSame( 0, url_to_postid( '/example/' ) );
     263    }
     264
     265    /**
     266     * @covers ::url_to_postid
     267     */
     268    public function test_url_to_postid_home_has_only_path() {
    260269        update_option( 'home', home_url( '/example/' ) );
    261270
Note: See TracChangeset for help on using the changeset viewer.