From 6b2e2bf8d7dcaa6a739ef96d7a11a6e92e0af061 Mon Sep 17 00:00:00 2001 From: Tonya Mork Date: Wed, 22 Sep 2021 23:33:24 +0000 Subject: [PATCH] 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. git-svn-id: https://develop.svn.wordpress.org/trunk@51853 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-includes/compat.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/wp-includes/compat.php b/src/wp-includes/compat.php index 6fe5ab37e17d8..b95275455ceae 100644 --- a/src/wp-includes/compat.php +++ b/src/wp-includes/compat.php @@ -79,6 +79,10 @@ function mb_substr( $str, $start, $length = null, $encoding = null ) { * @return string Extracted substring. */ function _mb_substr( $str, $start, $length = null, $encoding = null ) { + if ( null === $str ) { + return ''; + } + if ( null === $encoding ) { $encoding = get_option( 'blog_charset' ); }