WordPress/wp-admin/includes
iandunn e0449d4a8e 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.
Reviewed by SergeyBiryukov, iandunn.
Merges [49744] to the 5.6 branch.
Fixes #51913. See #19879.


Built from https://develop.svn.wordpress.org/branches/5.6@49745


git-svn-id: http://core.svn.wordpress.org/branches/5.6@49468 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-12-03 20:45:04 +00:00
..
admin-filters.php Administration: Remove multiple viewport meta tags from mobile pages. 2020-07-09 23:29:08 +00:00
admin.php Code Modernization: Replace `dirname( __FILE__ )` calls with `__DIR__` magic constant. 2020-02-06 06:33:11 +00:00
ajax-actions.php Coding Standards: Replace alias PHP functions with the canonical names. 2020-10-18 17:27:06 +00:00
bookmark.php Docs: Document the `$linkdata` parameter of `wp_insert_link()` using hash notation. 2020-11-03 03:52:10 +00:00
class-automatic-upgrader-skin.php Docs: Add missing descriptions for `Automatic_Upgrader_Skin` methods. 2020-11-14 16:23:10 +00:00
class-bulk-plugin-upgrader-skin.php Text Changes: Unify various "Back to..." vs. "Return to..." vs. "Go to..." strings. 2020-11-09 10:53:10 +00:00
class-bulk-theme-upgrader-skin.php Text Changes: Unify various "Back to..." vs. "Return to..." vs. "Go to..." strings. 2020-11-09 10:53:10 +00:00
class-bulk-upgrader-skin.php Code Modernisation: Introduce the spread operator in `wp-admin/includes/class-*-upgrader-skin.php`. 2019-09-15 10:42:54 +00:00
class-core-upgrader.php Upgrade/Install: Better UI for auto-update settings on update screen. 2020-11-12 22:37:10 +00:00
class-custom-background.php Themes: Ensure that only privileged users can set a background image when a theme is using the deprecated custom background page. 2020-10-29 18:09:13 +00:00
class-custom-image-header.php Coding standards: Modify escaping functions to avoid potential false positives. 2020-10-29 18:03:11 +00:00
class-file-upload-upgrader.php Docs: Improve inline comments per the documentation standards. 2020-01-29 00:45:18 +00:00
class-ftp-pure.php Docs: Update URLs in some `@link` tags and switch them to HTTPS. 2019-11-01 14:57:02 +00:00
class-ftp-sockets.php Docs: Update URLs in some `@link` tags and switch them to HTTPS. 2019-11-01 14:57:02 +00:00
class-ftp.php General: Continuing to work towards a passing PHP Compatibility scan. 2020-06-03 17:40:12 +00:00
class-language-pack-upgrader-skin.php Text Changes: Unify various "Back to..." vs. "Return to..." vs. "Go to..." strings. 2020-11-09 10:53:10 +00:00
class-language-pack-upgrader.php Docs: Add missing `@return` tag to `Language_Pack_Upgrader::check_package()`. 2020-10-05 13:44:11 +00:00
class-pclzip.php Code Modernization: Use `instanceof` instead of a comparison with `get_class()`. 2020-10-18 17:33:07 +00:00
class-plugin-installer-skin.php Text Changes: Unify various "Back to..." vs. "Return to..." vs. "Go to..." strings. 2020-11-09 10:53:10 +00:00
class-plugin-upgrader-skin.php Text Changes: Unify various "Back to..." vs. "Return to..." vs. "Go to..." strings. 2020-11-09 10:53:10 +00:00
class-plugin-upgrader.php Docs: Add missing `@return` tag to `Language_Pack_Upgrader::check_package()`. 2020-10-05 13:44:11 +00:00
class-theme-installer-skin.php Text Changes: Unify various "Back to..." vs. "Return to..." vs. "Go to..." strings. 2020-11-09 10:53:10 +00:00
class-theme-upgrader-skin.php Text Changes: Unify various "Back to..." vs. "Return to..." vs. "Go to..." strings. 2020-11-09 10:53:10 +00:00
class-theme-upgrader.php Docs: Add missing `@return` tag to `Language_Pack_Upgrader::check_package()`. 2020-10-05 13:44:11 +00:00
class-walker-category-checklist.php Docs: Further corrections and promotions for docblocks relating to `object` types. 2020-10-18 20:53:08 +00:00
class-walker-nav-menu-checklist.php General: Replace older-style PHP type conversion functions with type casts. 2020-10-08 21:15:13 +00:00
class-walker-nav-menu-edit.php Menus: Check the correct variable in `Walker_Nav_Menu_Edit::start_el()` when menu item is a taxonomy term. 2020-06-17 19:47:14 +00:00
class-wp-ajax-upgrader-skin.php Docs: Add missing descriptions for `Automatic_Upgrader_Skin` methods. 2020-11-14 16:23:10 +00:00
class-wp-application-passwords-list-table.php App Passwords: Further accessibility improvements. 2020-11-09 18:05:08 +00:00
class-wp-automatic-updater.php Coding Standards: Fix WPCS issues in [49242]. 2020-10-20 18:31:07 +00:00
class-wp-comments-list-table.php Coding Standards: Replace alias PHP functions with the canonical names. 2020-10-18 17:27:06 +00:00
class-wp-community-events.php Docs: Add a `@deprecated` note to `WP_Community_Events::format_event_data_time()`. 2020-10-19 13:22:07 +00:00
class-wp-debug-data.php Upgrade/Install: Prevent removal of additional data from plugin update info. 2020-11-02 19:13:07 +00:00
class-wp-filesystem-base.php Docs: Correct references to `WP_Filesystem_Base` methods in various DocBlocks. 2020-08-21 00:43:05 +00:00
class-wp-filesystem-direct.php Coding Standards: Add some space around control structures in `WP_Filesystem_*` classes for consistency and better readability. 2020-06-19 10:36:12 +00:00
class-wp-filesystem-ftpext.php Filesystem API: Use correct variable when closing the file handle in `WP_Filesystem_FTPext::get_contents()`. 2020-08-15 20:56:02 +00:00
class-wp-filesystem-ftpsockets.php Coding Standards: Add some space around control structures in `WP_Filesystem_*` classes for consistency and better readability. 2020-06-19 10:36:12 +00:00
class-wp-filesystem-ssh2.php Docs: First pass at some inline docs fixes mostly made by PHPCBF. 2020-07-23 20:01:04 +00:00
class-wp-importer.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
class-wp-internal-pointers.php Docs: Improve inline comments per the documentation standards. 2020-01-29 00:45:18 +00:00
class-wp-links-list-table.php Comments: Use the existing static variable instead of calling `::has_items()` again in `WP_Comments_List_Table::extra_tablenav()`. 2020-08-04 15:58:06 +00:00
class-wp-list-table-compat.php Docs: Add missing descriptions for `_WP_List_Table_Compat` methods. 2020-11-14 16:54:08 +00:00
class-wp-list-table.php Docs: Add missing descriptions for `_WP_List_Table_Compat` methods. 2020-11-14 16:54:08 +00:00
class-wp-media-list-table.php Media: Revert [49567]. 2020-12-01 16:35:04 +00:00
class-wp-ms-sites-list-table.php Docs: Further corrections and promotions for docblocks relating to `object` types. 2020-10-18 20:53:08 +00:00
class-wp-ms-themes-list-table.php Administration: Make sure auto-update counts properly update when bulk deleting plugins or themes. 2020-11-12 20:42:10 +00:00
class-wp-ms-users-list-table.php Docs: Fix and upgrade various `object` docblock notations. 2020-10-17 16:05:09 +00:00
class-wp-plugin-install-list-table.php Coding Standards: Use strict comparison in `wp-admin/includes/class-wp-plugin-install-list-table.php`. 2020-09-11 01:05:08 +00:00
class-wp-plugins-list-table.php Plugins: Make sure the HTML ID attributes for plugin checkboxes are unique. 2020-11-17 16:48:09 +00:00
class-wp-post-comments-list-table.php Coding Standards: Upgrade WPCS to 1.0.0 2018-08-17 01:51:36 +00:00
class-wp-posts-list-table.php Quick/Bulk Edit: Introduce `quick_edit_dropdown_authors_args` filter. 2020-10-20 16:40:05 +00:00
class-wp-privacy-data-export-requests-list-table.php Coding Standards: Fix WPCS issues in [49258]. 2020-10-20 21:20:07 +00:00
class-wp-privacy-data-removal-requests-list-table.php Coding Standards: Fix WPCS issues in [49258]. 2020-10-20 21:20:07 +00:00
class-wp-privacy-policy-content.php Text Changes: Unify various "Back to..." vs. "Return to..." vs. "Go to..." strings. 2020-11-09 10:53:10 +00:00
class-wp-privacy-requests-table.php Privacy: Show failures before successes for all bulk actions. 2020-10-27 18:19:06 +00:00
class-wp-screen.php Coding Standards: Use `self` when appropriate. 2020-10-18 17:18:07 +00:00
class-wp-site-health-auto-updates.php Upgrade/Install: Account for new `WP_AUTO_UPDATE_CORE` values in auto-updates settings form. 2020-10-24 00:26:05 +00:00
class-wp-site-health.php Site Health: Add missing i18n for the App Passwords documentation link. 2020-11-18 15:57:05 +00:00
class-wp-site-icon.php Docs: Improve inline comments per the documentation standards. 2020-01-29 00:45:18 +00:00
class-wp-terms-list-table.php Taxonomy: Allow for `wp_count_terms( $args )` signature, making passing a taxonomy optional. 2020-08-21 22:32:06 +00:00
class-wp-theme-install-list-table.php Bundled Themes: Make Twenty Twenty-One the default theme. 2020-10-20 02:04:07 +00:00
class-wp-themes-list-table.php I18N: Add context to some theme strings for consistency. 2020-07-21 16:33:05 +00:00
class-wp-upgrader-skin.php Docs: Fix the types for some properties and parameters that use the generic `object` type. 2020-10-10 19:14:04 +00:00
class-wp-upgrader-skins.php Docs: Add missing `@deprecated` tags in the file docblock of some deprecated files. 2019-10-08 17:19:04 +00:00
class-wp-upgrader.php Docs: Correct references to `WP_Filesystem_Base` methods in various DocBlocks. 2020-08-21 00:43:05 +00:00
class-wp-users-list-table.php Administration: Allow `WP_List_Table::get_bulk_items()` to receive a nested array in order to output optgroups. 2020-10-18 16:22:10 +00:00
comment.php Docs: Docblock corrections relating to `WP_Post` objects. 2020-11-09 15:15:08 +00:00
continents-cities.php I18N: Update list of continents and cities for the timezone selection. 2018-07-18 11:21:25 +00:00
credits.php Administration: Allow `wp_credits()` to accept `$version` and `$locale` parameters. 2020-08-03 12:53:08 +00:00
dashboard.php Administration: Make sure row actions for recent comments in Activity dashboard widget stay visible when a single row gets focus. 2020-12-01 19:21:06 +00:00
deprecated.php Docs: Add missing descriptions for `_WP_List_Table_Compat` methods. 2020-11-14 16:54:08 +00:00
edit-tag-messages.php Coding Standards: Fix the `Squiz.PHP.DisallowMultipleAssignments` violations in `wp-admin`. 2019-07-01 12:52:01 +00:00
export.php Coding Standards: Replace alias PHP functions with the canonical names. 2020-10-18 17:27:06 +00:00
file.php Multisite: More consistency for `clean_dirsize_cache()`. 2020-11-16 22:31:06 +00:00
image-edit.php General: Replace older-style PHP type conversion functions with type casts. 2020-10-08 21:15:13 +00:00
image.php Media: Standardise the description for image size parameters. 2020-09-20 16:23:07 +00:00
import.php Import: Remove "Blogroll" import option (for links in OPML format) from the list of popular importer plugins. 2020-02-10 02:12:06 +00:00
list-table.php Docs: Add missing descriptions for `_WP_List_Table_Compat` methods. 2020-11-14 16:54:08 +00:00
media.php Coding standards: Modify escaping functions to avoid potential false positives. 2020-10-29 18:03:11 +00:00
menu.php Coding Standards: Use strict comparison for `count()` calls. 2020-05-23 11:38:08 +00:00
meta-boxes.php Docs: Fix and upgrade various `object` docblock notations. 2020-10-17 16:05:09 +00:00
misc.php Coding Standards: Replace alias PHP functions with the canonical names. 2020-10-18 17:27:06 +00:00
ms-admin-filters.php Docs: Improve comments in some `wp-admin` files per the documentation standards. 2020-01-29 00:35:08 +00:00
ms-deprecated.php I18N: Capitalize translator comments consistently, add trailing punctuation. 2019-09-03 00:41:05 +00:00
ms.php Coding standards: Modify escaping functions to avoid potential false positives. 2020-10-29 18:03:11 +00:00
nav-menu.php Administration: Better targeting for required form field highlighting. 2020-10-23 15:05:09 +00:00
network.php App Passwords: Include authorization rewrite rule in default multisite .htaccess 2020-11-15 17:46:06 +00:00
noop.php Code Modernization: Remove conditional use of PHP `realpath()`. 2019-09-20 20:46:56 +00:00
options.php Coding Standards: Use strict comparison where static strings are involved. 2020-05-16 18:42:12 +00:00
plugin-install.php Docs: Miscellaneous docblock fixes. 2020-10-17 14:54:05 +00:00
plugin.php Administration: Restore alternative admin menu position for menu items with the same position value as an existing menu item. 2020-10-13 19:59:08 +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:57:05 +00:00
privacy-tools.php Text Changes: Unify various "Back to..." vs. "Return to..." vs. "Go to..." strings. 2020-11-09 10:53:10 +00:00
revision.php Coding Standards: Replace alias PHP functions with the canonical names. 2020-10-18 17:27:06 +00:00
schema.php Upgrade/Install: Enable all core autoupdates for new installs. 2020-11-12 20:22:09 +00:00
screen.php Docs: Various formatting improvements to inline docblocks. 2020-07-23 00:52:05 +00:00
taxonomy.php Coding Standards: Replace alias PHP functions with the canonical names. 2020-10-18 17:27:06 +00:00
template.php Coding standards: Modify escaping functions to avoid potential false positives. 2020-10-29 18:03:11 +00:00
theme-install.php Upgrade/install: Fix/clarify the "Upload in a zip format" string. 2020-07-19 17:11:02 +00:00
theme.php Upgrade/Install: Don't show theme update prompts on subsites. 2020-10-20 19:14:09 +00:00
translation-install.php Coding Standards: PHP short ternary operator syntax is not allowed. 2020-06-08 21:27:10 +00:00
update-core.php Bundled Themes: Make Twenty Twenty-One the default theme. 2020-10-20 02:04:07 +00:00
update.php Upgrade/Install: Check `$wp_version` global for displaying "You are using a development version" message in the admin footer. 2020-12-03 20:23:01 +00:00
upgrade.php Multisite: Cache absolute `dirsize` paths to avoid PHP 8 fatal. 2020-12-03 20:45:04 +00:00
user.php App Passwords: Support an app_id to uniquely identify instances of an app. 2020-10-22 15:06:09 +00:00
widgets.php Accessibility: Widgets: Add a "Cancel" link when editing a widget in accessibility mode. 2020-10-09 15:53:08 +00:00