Make WordPress Core

Changeset 56817

Timestamp:
10/10/2023 12:50:19 PM (10 months ago)
Author:
hellofromTonya
Message:

Options, Meta APIs: Check setting group exists before search in unregister_setting().

Checks if the given $option_group exists before searching for the $option_name. Sets the $pos to false, as array_search() returns false if the option name (needle) does not exist.

This changeset fixes 2 different PHP Warning|Notice scenarios:

  1. When the global $new_allowed_options is null, fixes raising Trying to access array offset on value of type null PHP Notice (PHP 7.4) | Warning (on PHP 8).
  1. When the global $new_allowed_options is an array and the setting group key does not exist, fixes raising "Undefined index: unknown_setting_group" PHP Notice (PHP 7) | Warning (on PHP 8).

For both scenarios, the array_search() is skipped and the $pos is set to a default of false, i.e. which is the value returned when array_search() is unsuccessful.

Props xknown, hellofromTonya, nicolefurlan, oglekler, SergeyBiryukov, shailu25.
Fixes #57674.

Location:
trunk
Files:
2 edited

Legend:

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

    r56814 r56817  
    29042904    }
    29052905
    2906     $pos = array_search( $option_name, (array) $new_allowed_options[ $option_group ], true );
     2906    $pos = false;
     2907    if ( isset( $new_allowed_options[ $option_group ] ) ) {
     2908        $pos = array_search( $option_name, (array) $new_allowed_options[ $option_group ], true );
     2909    }
    29072910
    29082911    if ( false !== $pos ) {
  • trunk/tests/phpunit/tests/option/registration.php

    r53865 r56817  
    150150        $this->assertFalse( has_filter( 'default_option_test_default', 'filter_default_option' ) );
    151151    }
     152
     153
     154
     155
     156
     157
     158
     159
     160
     161
     162
     163
     164
     165
    152166}
Note: See TracChangeset for help on using the changeset viewer.