WordPress/wp-includes
iandunn 4de6175227 Multisite: Cache absolute `dirsize` paths to avoid PHP 8 fatal.
r49212 greatly improved the performance of `get_dirsize()`, but also changed the structure of the data stored in the `dirsize_cache` transient. It stored relative paths instead of absolute ones, and also removed the unnecessary `size` array.

That difference in data structures led to a fatal error in the following environment:

* PHP 8
* Multisite
* A custom `WP_CONTENT_DIR` which is not a child of WP's `ABSPATH` folder (e.g., [https://roots.io/bedrock/ Bedrock])
* The `upload_space_check_disabled` option set to `0`

After upgrading to WP 5.6, the `dirsize_cache` transient still had data in the old format. When `wp-admin.php/index.php` was visited, `get_space_used()` received an `array` instead of an `int`, and tried to divide it by another `int`. PHP 7 would silently cast the arguments to match data types, but [https://wiki.php.net/rfc/arithmetic_operator_type_checks PHP 8 throws a fatal error]: 

`Uncaught TypeError: Unsupported operand types: array / int`

`recurse_dirsize()` was using `ABSPATH` to convert the absolute paths to relative ones, but some upload locations are not located under `ABSPATH`. In those cases, `$directory` and `$cache_path` were identical, and that triggered the early return of the old `array`, instead of the expected `int`. 

In order to avoid that, this commit restores the absolute paths, but without the `size` array. It also adds a type check when returning cached values. Using absolute paths without `size` has the result of overwriting the old data, so that it matches the new format. The type check and upgrade routine are additional safety measures.

Props peterwilsoncc, janthiel, helen, hellofromtonya, francina, pbiron.
Fixes #51913. See #19879.


Built from https://develop.svn.wordpress.org/trunk@49744


git-svn-id: http://core.svn.wordpress.org/trunk@49467 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-12-03 20:39:02 +00:00
..
ID3 Code Modernization: Only call `libxml_disable_entity_loader()` in PHP < 8. 2020-11-17 01:00:08 +00:00
IXR
PHPMailer External Libraries: Upgrade PHPMailer to version 6.2.0. 2020-11-30 17:10:05 +00:00
Requests External Libraries: Disable deserialization in Requests_Utility_FilteredIterator 2020-10-29 18:00:08 +00:00
SimplePie External Libraries: Update the SimplePie library to version 1.5.6. 2020-10-16 17:20:07 +00:00
Text Code Modernization: Use `instanceof` instead of a comparison with `get_class()`. 2020-10-18 17:33:07 +00:00
assets Editor: Update components package for WordPress 5.6 RC3. 2020-12-03 14:43:31 +00:00
block-patterns Editor: Don't unnecessarily split a translatable string in block templates. 2020-12-01 17:03:04 +00:00
block-supports General: Convert `wp_array_get()` to a "private" function and add tests. 2020-11-12 20:20:12 +00:00
blocks Editor: Update packages. 2020-11-12 19:36:36 +00:00
certificates HTTP: Update the Root Certificate bundle. 2020-08-01 14:09:06 +00:00
css Editor: Update packages for WordPress 5.6 RC2. 2020-12-01 12:19:43 +00:00
customize Docs: Add documentation for the `$type` and `$mime_type` properties in `WP_Customize_Image_Control`. 2020-11-22 15:53:03 +00:00
fonts Administration: Reverse the arrow direction for database import/export icons. 2020-07-17 17:11:03 +00:00
images
js Editor: Update components package for WordPress 5.6 RC3. 2020-12-03 14:43:31 +00:00
pomo Code Modernization: Remove unnecessary reference sign from `PO::export_entry()` definition. 2020-10-18 06:29:05 +00:00
random_compat
rest-api REST API: Pass the previous state of the post as a parameter to the `wp_after_insert_post` hook. 2020-12-01 20:47:06 +00:00
sitemaps Sitemaps: Center the container for sitemap content. 2020-10-20 02:22:07 +00:00
sodium_compat Upgrade/Install: Update sodium_compat to v1.14.0. 2020-12-03 17:41:07 +00:00
theme-compat
widgets General: Remove `noreferrer` from `wp_targeted_link_rel()` and other uses. 2020-10-19 23:39:04 +00:00
admin-bar.php Docs: First pass at some inline docs fixes mostly made by PHPCBF. 2020-07-23 20:01:04 +00:00
atomlib.php Feeds: Fix "Only variables should be passed by reference" PHP notice in `atomlib.php`. 2020-10-17 15:45:06 +00:00
author-template.php Docs: Document parameters that accept an array of integers using typed array notation. 2020-11-19 18:24:09 +00:00
block-patterns.php Block Editor: Update the Core Block Patterns. 2020-07-27 15:14:04 +00:00
blocks.php Editor: Remove render_block hooks from WP_Block 2020-11-25 01:20:09 +00:00
bookmark-template.php Docs: Clarify that the `$class` argument of `wp_list_bookmarks()` can accept an array. 2020-11-24 12:29:07 +00:00
bookmark.php Docs: Miscellaneous DocBlock corrections. 2020-07-23 21:55:04 +00:00
cache-compat.php
cache.php Docs: Upgrade more parameters in docblocks to used typed array notation. 2020-11-24 21:27:05 +00:00
canonical.php Permalinks: Prevent attachment pages 404ing following [49563]. 2020-11-17 03:29:12 +00:00
capabilities.php Taxonomy: Rename the `default_taxonomy_$taxonomy` option key to `default_term_$taxonomy`. 2020-07-28 15:42:07 +00:00
category-template.php Docs: Upgrade more parameters in docblocks to used typed array notation. 2020-11-24 21:27:05 +00:00
category.php Docs: Miscellaneous DocBlock corrections. 2020-07-23 21:55:04 +00:00
class-IXR.php
class-feed.php
class-http.php Docs: Standardise the type name for booleans and integers. 2020-10-10 20:02:05 +00:00
class-json.php Coding Standards: Pass an empty string instead of `null` as the `$replacement` parameter to `_deprecated_file()`. 2020-11-12 11:17:07 +00:00
class-oembed.php
class-phpass.php
class-phpmailer.php Mail: Make sure the `PHPMailer` class is only required once if a plugin requires `wp-includes/class-phpmailer.php` directly. 2020-07-21 12:58:02 +00:00
class-pop3.php
class-requests.php
class-simplepie.php External Libraries: Update the SimplePie library to version 1.5.6. 2020-10-16 17:20:07 +00:00
class-smtp.php
class-snoopy.php
class-walker-category-dropdown.php Docs: Fix and upgrade various `object` docblock notations. 2020-10-17 16:05:09 +00:00
class-walker-category.php Docs: Fix and upgrade various `object` docblock notations. 2020-10-17 16:05:09 +00:00
class-walker-comment.php Comments: Further remove unnecessary context switch in `Walker_Comment`. 2020-10-15 15:26:05 +00:00
class-walker-nav-menu.php General: Remove `noreferrer` from `wp_targeted_link_rel()` and other uses. 2020-10-19 23:39:04 +00:00
class-walker-page-dropdown.php
class-walker-page.php
class-wp-admin-bar.php Docs: Improve description for `WP_Admin_Bar::add_group()`. 2020-08-19 02:46:04 +00:00
class-wp-ajax-response.php
class-wp-application-passwords.php App Passwords: Return true when rate limiting a password's last used time. 2020-12-03 16:30:06 +00:00
class-wp-block-list.php
class-wp-block-parser.php Editor: update packages; Port block supports to WordPress core. 2020-10-13 13:10:30 +00:00
class-wp-block-pattern-categories-registry.php Docs: Add missing `@since` tags for properties in some block editor classes: 2020-10-26 21:51:08 +00:00
class-wp-block-patterns-registry.php Docs: Add missing `@since` tags for properties in some block editor classes: 2020-10-26 21:51:08 +00:00
class-wp-block-styles-registry.php Docs: Standardise the type name for booleans and integers. 2020-10-10 20:02:05 +00:00
class-wp-block-supports.php Docs: Correct DocBlock formatting for `render_block()`. 2020-10-26 21:55:10 +00:00
class-wp-block-type-registry.php Docs: Add a note that the `$args` parameter of `register_block_type()` accepts any public property of `WP_Block_Type`. 2020-07-26 22:17:01 +00:00
class-wp-block-type.php Block Editor: Expose api_version in the block type and the REST endpoint. 2020-10-20 07:54:10 +00:00
class-wp-block.php Editor: Remove render_block hooks from WP_Block 2020-11-25 01:20:09 +00:00
class-wp-comment-query.php Docs: Upgrade more parameters in docblocks to used typed array notation. 2020-11-24 21:27:05 +00:00
class-wp-comment.php Docs: Various docblock corrections and improvements. 2020-09-04 20:41:07 +00:00
class-wp-customize-control.php Docs: Miscellaneous docblock fixes. 2020-10-17 14:54:05 +00:00
class-wp-customize-manager.php REST API: Pass the previous state of the post as a parameter to the `wp_after_insert_post` hook. 2020-12-01 20:47:06 +00:00
class-wp-customize-nav-menus.php General: Replace older-style PHP type conversion functions with type casts. 2020-10-08 21:15:13 +00:00
class-wp-customize-panel.php
class-wp-customize-section.php
class-wp-customize-setting.php Docs: Another pass at some inline docs fixes mostly made by PHPCBF. 2020-07-23 21:11:05 +00:00
class-wp-customize-widgets.php General: Replace older-style PHP type conversion functions with type casts. 2020-10-08 21:15:13 +00:00
class-wp-date-query.php Docs: Document parameters that accept an array of integers using typed array notation. 2020-11-19 18:24:09 +00:00
class-wp-dependency.php Docs: Various corrections to inline docblocks. 2020-07-23 00:48:06 +00:00
class-wp-editor.php I18N: Merge duplicate "Column" strings, remove unnecessary context. 2020-11-09 11:17:07 +00:00
class-wp-embed.php Docs: First pass at some inline docs fixes mostly made by PHPCBF. 2020-07-23 20:01:04 +00:00
class-wp-error.php General: Docblock improvements for the `WP_Error` class. 2020-10-09 22:30:04 +00:00
class-wp-fatal-error-handler.php Site Health: Site errors are for *this* site, not necessarily *your* site. 2020-11-02 19:55:07 +00:00
class-wp-feed-cache-transient.php
class-wp-feed-cache.php Feeds: Register transient feed cache handler using the recommended method for SimplePie 1.3 or later. 2020-11-12 14:36:10 +00:00
class-wp-hook.php Docs: Add more information about how to use filters that run before WordPress initialises. 2020-11-03 17:36:09 +00:00
class-wp-http-cookie.php Docs: Further corrections and improvements to various inline docblocks. 2020-07-23 07:39:02 +00:00
class-wp-http-curl.php General: Replace older-style PHP type conversion functions with type casts. 2020-10-08 21:15:13 +00:00
class-wp-http-encoding.php
class-wp-http-ixr-client.php Docs: First pass at some inline docs fixes mostly made by PHPCBF. 2020-07-23 20:01:04 +00:00
class-wp-http-proxy.php
class-wp-http-requests-hooks.php Docs: Add missing `@since` tags. 2020-11-19 17:54:05 +00:00
class-wp-http-requests-response.php
class-wp-http-response.php
class-wp-http-streams.php Docs: Various docblock corrections and improvements. 2020-11-14 16:35:06 +00:00
class-wp-image-editor-gd.php Media: Return a `WP_Error` from `WP_Image_Editor_GD::load()` if file contents could not be retrieved. 2020-09-20 14:28:05 +00:00
class-wp-image-editor-imagick.php Coding Standards: Use consistent formatting for error messages in `WP_Image_Editor_Imagick::write_image()` and `::strip_meta()`. 2020-11-09 15:35:05 +00:00
class-wp-image-editor.php Media: Support Stream Wrappers In `WP_Image_Editor_Imagick` 2020-10-20 14:37:05 +00:00
class-wp-list-util.php
class-wp-locale-switcher.php I18N: Revert [49236] for now to investigate alternative implementations. 2020-11-12 14:43:09 +00:00
class-wp-locale.php Docs: Update the URL for PHP date formats table in translator comments. 2020-09-18 10:37:08 +00:00
class-wp-matchesmapregex.php General: Replace older-style PHP type conversion functions with type casts. 2020-10-08 21:15:13 +00:00
class-wp-meta-query.php Docs: Improve docs for arguments that accept a numerically indexed array of associative arrays. 2020-07-14 12:10:05 +00:00
class-wp-metadata-lazyloader.php
class-wp-network-query.php Docs: Upgrade more parameters in docblocks to used typed array notation. 2020-11-24 21:27:05 +00:00
class-wp-network.php
class-wp-object-cache.php Docs: Various docblock corrections relating to parameter types. 2020-11-24 21:22:04 +00:00
class-wp-oembed-controller.php Docs: Corrections and improvements to inline docs relating to the REST API. 2020-11-16 11:04:12 +00:00
class-wp-oembed.php Docs: Document the `$args` parameter of `wp_oembed_get()`. 2020-11-17 10:11:11 +00:00
class-wp-paused-extensions-storage.php
class-wp-post-type.php Docs: Change the `@since` entry for `template` and `template_lock` post type arguments to `5.0.0`. 2020-11-04 02:47:05 +00:00
class-wp-post.php Docs: Docblock corrections relating to `WP_Post` objects. 2020-11-09 15:15:08 +00:00
class-wp-query.php Docs: Corrections and improvements to docs for properties of the `WP_Query` class. 2020-11-26 17:04:06 +00:00
class-wp-recovery-mode-cookie-service.php Docs: Consistently use third-person singular verbs for various filter descriptions, per the documentation standards. 2020-08-11 00:34:08 +00:00
class-wp-recovery-mode-email-service.php Docs: Add a `@since` note for the `recovery_mode_email` filter about the `$email` argument now including the `attachments` key. 2020-09-18 11:03:02 +00:00
class-wp-recovery-mode-key-service.php
class-wp-recovery-mode-link-service.php Docs: Consistently use third-person singular verbs for various filter descriptions, per the documentation standards. 2020-08-11 00:34:08 +00:00
class-wp-recovery-mode.php Docs: Consistently use third-person singular verbs for various filter descriptions, per the documentation standards. 2020-08-11 00:34:08 +00:00
class-wp-rewrite.php Docs: Clarify and standardise on terminology used for rewrite rule endpoint masks. 2020-11-19 16:15:08 +00:00
class-wp-role.php Docs: Various formatting improvements to inline docblocks. 2020-07-23 00:52:05 +00:00
class-wp-roles.php Docs: First pass at some inline docs fixes mostly made by PHPCBF. 2020-07-23 20:01:04 +00:00
class-wp-session-tokens.php Code Modernization: Remove `final` keyword from private methods. 2020-08-12 15:05:08 +00:00
class-wp-simplepie-file.php Docs: Standardise the type name for booleans and integers. 2020-10-10 20:02:05 +00:00
class-wp-simplepie-sanitize-kses.php Docs: Standardise the type name for booleans and integers. 2020-10-10 20:02:05 +00:00
class-wp-site-query.php Docs: Upgrade more parameters in docblocks to used typed array notation. 2020-11-24 21:27:05 +00:00
class-wp-site.php
class-wp-tax-query.php Docs: Improve docs for arguments that accept a numerically indexed array of associative arrays. 2020-07-14 12:10:05 +00:00
class-wp-taxonomy.php Taxonomy: Revert Light-weight/partial term counts. 2020-10-30 04:59:08 +00:00
class-wp-term-query.php Docs: Document parameters that accept an array of integers using typed array notation. 2020-11-19 18:24:09 +00:00
class-wp-term.php
class-wp-text-diff-renderer-inline.php
class-wp-text-diff-renderer-table.php Coding Standards: Replace alias PHP functions with the canonical names. 2020-10-18 17:27:06 +00:00
class-wp-theme.php Bundled Themes: Make Twenty Twenty-One the default theme. 2020-10-20 02:04:07 +00:00
class-wp-user-meta-session-tokens.php
class-wp-user-query.php Docs: Upgrade more parameters in docblocks to used typed array notation. 2020-11-24 21:27:05 +00:00
class-wp-user-request.php
class-wp-user.php General: Replace older-style PHP type conversion functions with type casts. 2020-10-08 21:15:13 +00:00
class-wp-walker.php Docs: Fix typo in a comment in `Walker::display_element()`. 2020-11-05 18:46:10 +00:00
class-wp-widget-factory.php
class-wp-widget.php Docs: Standardise the type name for booleans and integers. 2020-10-10 20:02:05 +00:00
class-wp-xmlrpc-server.php XML-RPC: Return error message if attachment ID is incorrect. 2020-10-29 18:05:06 +00:00
class-wp.php Docs: Synchronize descriptions of some query functions and their counterpart methods in `WP` and `WP_Query` classes: 2020-10-06 08:59:04 +00:00
class.wp-dependencies.php
class.wp-scripts.php Script Loader: Disable concatenation for scripts with translations to ensure they are printed in the right order. 2020-08-27 21:58:04 +00:00
class.wp-styles.php
comment-template.php Docs: Clarify the `$format` parameter description in `comment_time()`. 2020-12-02 16:55:06 +00:00
comment.php General: Remove `noreferrer` from `wp_targeted_link_rel()` and other uses. 2020-10-19 23:39:04 +00:00
compat.php Coding Standards: Replace alias PHP functions with the canonical names. 2020-10-18 17:27:06 +00:00
cron.php Cron API: Improve the inline documentation for the args passed to the cron event scheduling functions. 2020-10-28 18:37:07 +00:00
date.php
default-constants.php Bundled Themes: Make Twenty Twenty-One the default theme. 2020-10-20 02:04:07 +00:00
default-filters.php Block Editor: Update the WordPress Packages to the latest version. 2020-10-20 13:36:16 +00:00
default-widgets.php
deprecated.php Docs: Various docblock corrections and improvements. 2020-11-14 16:35:06 +00:00
embed-template.php
embed.php Docs: Use typed array notation for the `$size` parameter of `embed_defaults` filter. 2020-11-25 12:14:05 +00:00
error-protection.php Docs: Add more information about how to use filters that run before WordPress initialises. 2020-11-03 17:36:09 +00:00
feed-atom-comments.php
feed-atom.php
feed-rdf.php
feed-rss.php
feed-rss2-comments.php Docs: Use more appropriate variable names in the inline docs for action and filter parameters. 2020-07-23 19:06:03 +00:00
feed-rss2.php
feed.php Feeds: Register transient feed cache handler using the recommended method for SimplePie 1.3 or later. 2020-11-12 14:36:10 +00:00
formatting.php Docs: Add a `@see` reference to `esc_url()` from `esc_url_raw()`. 2020-11-06 14:16:07 +00:00
functions.php Multisite: Cache absolute `dirsize` paths to avoid PHP 8 fatal. 2020-12-03 20:39:02 +00:00
functions.wp-scripts.php Docs: Another pass at some inline docs fixes mostly made by PHPCBF. 2020-07-23 21:11:05 +00:00
functions.wp-styles.php
general-template.php Docs: Various docblock corrections and improvements. 2020-11-14 16:35:06 +00:00
http.php General: Replace older-style PHP type conversion functions with type casts. 2020-10-08 21:15:13 +00:00
kses.php Docs: Correct an example in `wp_kses_normalize_entities()` description. 2020-10-25 00:14:05 +00:00
l10n.php I18N: Avoid PHP notices for relative URLs in `load_script_textdomain()`. 2020-11-17 20:52:09 +00:00
link-template.php Docs: Document parameters that accept an array of integers using typed array notation. 2020-11-19 18:24:09 +00:00
load.php General: Rename the `wp_error_checked` action to `is_wp_error_instance` for clarity. 2020-11-17 19:21:05 +00:00
locale.php
media-template.php Media: Allow users to switch from media grid to list mode in media library. 2020-11-12 15:46:07 +00:00
media.php Media: Avoid fatal error in `wp_prepare_attachment_for_js(). 2020-11-16 19:20:09 +00:00
meta.php Options, Meta APIs: Pass `$meta_type` to the `get_{$meta_type}_metadata` filter in `metadata_exists()`. 2020-11-26 12:34:06 +00:00
ms-blogs.php Docs: Fix and upgrade various `object` docblock notations. 2020-10-17 16:05:09 +00:00
ms-default-constants.php
ms-default-filters.php
ms-deprecated.php Docs: Document parameters that accept an array of integers using typed array notation. 2020-11-19 18:24:09 +00:00
ms-files.php
ms-functions.php Multisite: Rename the `calculate_current_dirsize` filter to `pre_recurse_dirsize`. 2020-11-17 15:44:07 +00:00
ms-load.php Docs: Further corrections and promotions for docblocks relating to `object` types. 2020-10-18 20:53:08 +00:00
ms-network.php Coding Standards: Replace alias PHP functions with the canonical names. 2020-10-18 17:27:06 +00:00
ms-settings.php
ms-site.php Docs: Upgrade more parameters in docblocks to used typed array notation. 2020-11-24 21:27:05 +00:00
nav-menu-template.php
nav-menu.php General: Replace older-style PHP type conversion functions with type casts. 2020-10-08 21:15:13 +00:00
option.php Docs: For clarity, add some information about the return types of `get_option()`. 2020-11-14 17:02:05 +00:00
pluggable-deprecated.php
pluggable.php Docs: Various docblock corrections relating to parameter types. 2020-11-24 21:22:04 +00:00
plugin.php Docs: Improve the docs for the globals that are used in the actions and filters API. 2020-10-18 19:19:06 +00:00
post-formats.php Docs: Upgrade more parameters in docblocks to used typed array notation. 2020-11-24 21:27:05 +00:00
post-template.php Docs: Upgrade more parameters in docblocks to used typed array notation. 2020-11-24 21:27:05 +00:00
post-thumbnail-template.php Docs: Upgrade more parameters in docblocks to used typed array notation. 2020-11-24 21:27:05 +00:00
post.php REST API: Pass the previous state of the post as a parameter to the `wp_after_insert_post` hook. 2020-12-01 20:47:06 +00:00
query.php Docs: Improve documentation for `WP_Query::is_archive()` per the documentation standards. 2020-11-05 09:44:05 +00:00
registration-functions.php Coding Standards: Pass an empty string instead of `null` as the `$replacement` parameter to `_deprecated_file()`. 2020-11-12 11:17:07 +00:00
registration.php Coding Standards: Pass an empty string instead of `null` as the `$replacement` parameter to `_deprecated_file()`. 2020-11-12 11:17:07 +00:00
rest-api.php Docs: Add missing full stop for a comment in `create_initial_rest_routes()`. 2020-11-16 16:48:12 +00:00
revision.php General: Replace older-style PHP type conversion functions with type casts. 2020-10-08 21:15:13 +00:00
rewrite.php Docs: Clarify and standardise on terminology used for rewrite rule endpoint masks. 2020-11-19 16:15:08 +00:00
rss-functions.php Feeds: Add an early exit when calling RSS functions directly. 2020-11-16 22:52:05 +00:00
rss.php
script-loader.php Site Health, App Passwords: Ensure REST API responses are properly translated. 2020-12-01 03:44:05 +00:00
session.php
shortcodes.php Coding Standards: Replace alias PHP functions with the canonical names. 2020-10-18 17:27:06 +00:00
sitemaps.php Sitemaps: Prevent incorrect redirection of paged sitemap requests. 2020-08-27 01:30:04 +00:00
spl-autoload-compat.php Coding Standards: Pass an empty string instead of `null` as the `$replacement` parameter to `_deprecated_file()`. 2020-11-12 11:17:07 +00:00
taxonomy.php Docs: Upgrade more parameters in docblocks to used typed array notation. 2020-11-24 21:27:05 +00:00
template-loader.php
template.php
theme.php Themes: Clarify the `_doing_it_wrong()` message for post formats in `add_theme_support()`. 2020-10-29 00:08:06 +00:00
update.php Upgrade/Install: Allow WordPress sites to opt-in to beta & RC releases. 2020-10-20 17:56:06 +00:00
user.php Docs: Upgrade more parameters in docblocks to used typed array notation. 2020-11-24 21:27:05 +00:00
vars.php General: Replace older-style PHP type conversion functions with type casts. 2020-10-08 21:15:13 +00:00
version.php Multisite: Cache absolute `dirsize` paths to avoid PHP 8 fatal. 2020-12-03 20:39:02 +00:00
widgets.php Docs: Clarify `sprintf()` usage for the `before_widget` argument of `register_sidebar()`. 2020-11-11 10:39:09 +00:00
wlwmanifest.xml
wp-db.php Code Modernization: Use explicit visibility for class property declarations. 2020-10-17 16:26:09 +00:00
wp-diff.php