Make WordPress Core

08/17/2021 10:07:55 PM (3 years ago)

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

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

It is entirely possible for the siteurl option to not have a "path" component.

In PHP 8.1, this would lead to a trim(): 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 parse_url() prevents that.

As this function is declaring global constants, adding tests for this change is not really an option without potentially affecting other tests.

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

Props jrf, hellofromTonya, SergeyBiryukov.
See #53635.

1 edited


  • trunk/src/wp-includes/ms-default-constants.php

    r48109 r51630  
    6969     */
    7070    if ( ! defined( 'ADMIN_COOKIE_PATH' ) ) {
    71         if ( ! is_subdomain_install() || trim( parse_url( get_option( 'siteurl' ), PHP_URL_PATH ), '/' ) ) {
     71        $site_path = parse_url( get_option( 'siteurl' ), PHP_URL_PATH );
     72        if ( ! is_subdomain_install() || is_string( $site_path ) && trim( $site_path, '/' ) ) {
    7273            define( 'ADMIN_COOKIE_PATH', SITECOOKIEPATH );
    7374        } else {
Note: See TracChangeset for help on using the changeset viewer.