Make WordPress Core


Ignore:
Timestamp:
09/22/2021 11:33:24 PM (3 years ago)
Author:
hellofromTonya
Message:

Code Modernization: Fix "passing null to non-nullable" deprecation in _mb_substr().

The _mb_substr() function expects a string for the $str parameter, but does not do input validation. This function contains a preg_match_all() which also expects a string type for the given subject (i.e. $str).

Passing null to this parameter results in preg_match_all(): Passing null to parameter #2 ($subject) of type string is deprecated notice on PHP 8.1.

To maintain the same behaviour as before, a guard clause is added to bail out early when $str is passed as null. The outcome will, in that case, only ever be an empty string.

Note: this does mean that the _mb_substr() function now has a subtle difference in behaviour compared to the PHP native mb_substr() function as the latter will throw the deprecation notice.

The existing tests already cover this issue.

Follow-up to [17621], [36017], [32364].

Props jrf, hellofromTonya.
See #53635.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/compat.php

    r51474 r51853  
    8080 */
    8181function _mb_substr( $str, $start, $length = null, $encoding = null ) {
     82    if ( null === $str ) {
     83        return '';
     84    }
     85
    8286    if ( null === $encoding ) {
    8387        $encoding = get_option( 'blog_charset' );
Note: See TracChangeset for help on using the changeset viewer.