Skip to content

Commit

Permalink
Options, Meta APIs: Check if the gmt_offset value is numeric in `sa…
Browse files Browse the repository at this point in the history
…nitize_option()`.

When saving the settings via the admin UI, the default value for any options not passed in the current `$_POST` request is set to `null` in `wp-admin/options.php`. Some options, e.g. `blog_public`, then rely on `null` being passed to `update_option()` to determine whether the value was changed or not.

This commit resolves a PHP 8.1 deprecation notice when saving the `gmt_offset` option without any changes:
{{{
Deprecated: preg_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated
}}}

Includes a similar fix for the `blog_charset` option.

Follow-up to [4112], [4329], [5541], [21849].

Props adi3890, dhrupo, hrdelwar, hasanmisbah, oglekler, mukesh27, SergeyBiryukov.
Fixes #57728.

git-svn-id: https://develop.svn.wordpress.org/trunk@56132 602fd350-edb4-49c9-b593-d223f7449a82
  • Loading branch information
SergeyBiryukov committed Jul 4, 2023
1 parent 6ba1ca6 commit e834fed
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 2 deletions.
12 changes: 10 additions & 2 deletions src/wp-includes/formatting.php
Original file line number Diff line number Diff line change
Expand Up @@ -4883,7 +4883,11 @@ function sanitize_option( $option, $value ) {
break;

case 'blog_charset':
$value = preg_replace( '/[^a-zA-Z0-9_-]/', '', $value ); // Strips slashes.
if ( is_string( $value ) ) {
$value = preg_replace( '/[^a-zA-Z0-9_-]/', '', $value ); // Strips slashes.
} else {
$value = '';
}
break;

case 'blog_public':
Expand Down Expand Up @@ -4918,7 +4922,11 @@ function sanitize_option( $option, $value ) {
break;

case 'gmt_offset':
$value = preg_replace( '/[^0-9:.-]/', '', $value ); // Strips slashes.
if ( is_numeric( $value ) ) {
$value = preg_replace( '/[^0-9:.-]/', '', $value ); // Strips slashes.
} else {
$value = '';
}
break;

case 'siteurl':
Expand Down
2 changes: 2 additions & 0 deletions tests/phpunit/tests/option/sanitizeOption.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public function data_sanitize_option() {
array( 'blogname', '&lt;i&gt;My Site&lt;/i&gt;', '<i>My Site</i>' ),
array( 'blog_charset', 'UTF-8', 'UTF-8' ),
array( 'blog_charset', 'charset', '">charset<"' ),
array( 'blog_charset', '', null ),
array( 'blog_public', 1, null ),
array( 'blog_public', 1, '1' ),
array( 'blog_public', -2, '-2' ),
Expand All @@ -45,6 +46,7 @@ public function data_sanitize_option() {
array( 'ping_sites', "http://www.example.com\nhttp://example.org", "www.example.com \n\texample.org\n\n" ),
array( 'gmt_offset', '0', 0 ),
array( 'gmt_offset', '1.5', '1.5' ),
array( 'gmt_offset', '', null ),
array( 'siteurl', 'http://example.org', 'http://example.org' ),
array( 'siteurl', 'http://example.org/subdir', 'http://example.org/subdir' ),
array( 'siteurl', get_option( 'siteurl' ), '' ),
Expand Down

0 comments on commit e834fed

Please sign in to comment.