Make WordPress Core


Ignore:
Timestamp:
09/15/2021 10:18:36 PM (5 years ago)
Author:
hellofromTonya
Message:

Options, Meta APIs: Fix "passing null to non-nullable" deprecations to (get|add|update|delete)_option().

In all four of the get_option(), add_option(), update_option() and delete_option() functions, the $option parameter (i.e. the option name) is passed to the PHP native trim() function without prior input validation.

In PHP 8.1, this could lead to a trim(): Passing null to parameter #1 ($string) of type string is deprecated for each of these functions.

trim():

  • expects a text string and is only useful when passed a text string as no other variable type can contain whitespace.
  • will always return a string, which means that in practice for any non-string values passed, it would effectively function as a type cast to string.

This commit:

  • Adds a check to verify the $option name is a scalar before processing it with trim().
  • The "type cast" behavior is maintained.
  • If the given $option name is not a scalar, such as null, the fix prevents the PHP 8.1 deprecation notice.
  • Tests are added for valid but undesired option names to safeguard against regressions.

This issue is already covered by:

  • the existing Tests_Option_Option::test_bad_option_names() test group.
  • the new test_valid_but_undesired_option_names() tests.

Follow-up to [13858], [22633], [23510], [25002], [51817].

Props jrf, hellofromTonya, pbearne.
See #53635.

File:
1 edited

Legend:

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

    r51324 r51818  
    7878        global $wpdb;
    7979
    80         $option = trim( $option );
     80        if ( is_scalar( $option ) ) {
     81                $option = trim( $option );
     82        }
     83
    8184        if ( empty( $option ) ) {
    8285                return false;
     
    379382        global $wpdb;
    380383
    381         $option = trim( $option );
     384        if ( is_scalar( $option ) ) {
     385                $option = trim( $option );
     386        }
     387
    382388        if ( empty( $option ) ) {
    383389                return false;
     
    566572        }
    567573
    568         $option = trim( $option );
     574        if ( is_scalar( $option ) ) {
     575                $option = trim( $option );
     576        }
     577
    569578        if ( empty( $option ) ) {
    570579                return false;
     
    688697        global $wpdb;
    689698
    690         $option = trim( $option );
     699        if ( is_scalar( $option ) ) {
     700                $option = trim( $option );
     701        }
     702
    691703        if ( empty( $option ) ) {
    692704                return false;
Note: See TracChangeset for help on using the changeset viewer.