From 35fb05f30de9580a0a94976c7bf95e82a731c2d7 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Fri, 30 Sep 2022 00:40:11 +0000 Subject: [PATCH] Code Modernization: Fix null to non-nullable deprecation in `WP_Theme_JSON::get_property_value()`. This commit aims to fix errors caused by incorrect usage of the `strncmp()` function inside the `WP_Theme_JSON::get_property_value()` method on PHP 8.1 and above. Some history of the affected code: * [50973] introduced the `WP_Theme_JSON::get_property_value()` method. * [54162] removed the `$default` parameter from the `_wp_array_get()` call in the method. With the latter change, the default value that is returned if the path does not exist within the array, or if `$array` or `$path` are not arrays, became `null` instead of an empty string. Since `null` would then be unintentionally passed to the `strncmp()` function further in the code, this caused ~35 errors in the test suite along the lines of: {{{ 1) Tests_Blocks_Editor::test_get_block_editor_settings_theme_json_settings strncmp(): Passing null to parameter #1 ($string1) of type string is deprecated /var/www/src/wp-includes/class-wp-theme-json.php:1754 /var/www/src/wp-includes/class-wp-theme-json.php:1641 /var/www/src/wp-includes/class-wp-theme-json.php:2066 /var/www/src/wp-includes/class-wp-theme-json.php:1002 /var/www/src/wp-includes/class-wp-theme-json.php:898 /var/www/src/wp-includes/global-styles-and-settings.php:140 /var/www/src/wp-includes/block-editor.php:421 /var/www/tests/phpunit/tests/blocks/editor.php:388 /var/www/vendor/bin/phpunit:123 }}} This commit includes: * Restoring the `$default` value for `_wp_array_get()` call. * Adding an early return if the value is an empty string or `null`. * Adding a dedicated unit test to ensure that the method returns a string for invalid paths or `null` values. Follow-up to [50973], [54162]. Props antonvlasenko, jrf, imadarshakshat, SergeyBiryukov. Fixes #56620. Built from https://develop.svn.wordpress.org/trunk@54362 git-svn-id: http://core.svn.wordpress.org/trunk@53921 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/class-wp-theme-json.php | 7 ++++++- wp-includes/version.php | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/wp-includes/class-wp-theme-json.php b/wp-includes/class-wp-theme-json.php index 749ee90c0c..4f5627a790 100644 --- a/wp-includes/class-wp-theme-json.php +++ b/wp-includes/class-wp-theme-json.php @@ -1709,7 +1709,12 @@ class WP_Theme_JSON { * @return string|array Style property value. */ protected static function get_property_value( $styles, $path, $theme_json = null ) { - $value = _wp_array_get( $styles, $path ); + $value = _wp_array_get( $styles, $path, '' ); + + if ( '' === $value || null === $value ) { + // No need to process the value further. + return ''; + } /* * This converts references to a path to the value at that path diff --git a/wp-includes/version.php b/wp-includes/version.php index 69b0de7a79..d25e0081bc 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -16,7 +16,7 @@ * * @global string $wp_version */ -$wp_version = '6.1-beta2-54361'; +$wp_version = '6.1-beta2-54362'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.