Make WordPress Core


Ignore:
Timestamp:
09/30/2022 12:38:58 AM (2 years ago)
Author:
SergeyBiryukov
Message:

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.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-theme-json.php

    r54360 r54362  
    17101710     */
    17111711    protected static function get_property_value( $styles, $path, $theme_json = null ) {
    1712         $value = _wp_array_get( $styles, $path );
     1712        $value = _wp_array_get( $styles, $path, '' );
     1713
     1714        if ( '' === $value || null === $value ) {
     1715            // No need to process the value further.
     1716            return '';
     1717        }
    17131718
    17141719        /*
Note: See TracChangeset for help on using the changeset viewer.