From e57bd841f0a1589944298a5b73ef247e98d6efb3 Mon Sep 17 00:00:00 2001 From: Sergey Biryukov Date: Mon, 17 Jan 2022 11:39:35 +0000 Subject: [PATCH] Upgrade/Install: Check if the `disk_free_space()` function exists before calling it. In PHP 8+, `@` no longer suppresses fatal errors: > The `@` operator will no longer silence fatal errors (`E_ERROR`, `E_CORE_ERROR`, `E_COMPILE_ERROR`, `E_USER_ERROR`, `E_RECOVERABLE_ERROR`, `E_PARSE`). Reference: [https://www.php.net/manual/en/migration80.incompatible.php PHP 8: Backward Incompatible Changes]. `disk_free_space()` may be disabled by hosts, which will throw a fatal error on a call to undefined function. This change prevents the fatal error, and falls back to `false` when `disk_free_space()` is unavailable. Follow-up to [25540], [25774], [25776], [25831], [25869]. Props costdev, jrf, swb1192, SergeyBiryukov. Fixes #54826. See #54730. git-svn-id: https://develop.svn.wordpress.org/trunk@52585 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/file.php | 4 ++-- src/wp-admin/includes/update-core.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/wp-admin/includes/file.php b/src/wp-admin/includes/file.php index 1fbfe39678..79e2d48103 100644 --- a/src/wp-admin/includes/file.php +++ b/src/wp-admin/includes/file.php @@ -1661,7 +1661,7 @@ function _unzip_file_ziparchive( $file, $to, $needed_dirs = array() ) { * Require we have enough space to unzip the file and copy its contents, with a 10% buffer. */ if ( wp_doing_cron() ) { - $available_space = @disk_free_space( WP_CONTENT_DIR ); + $available_space = function_exists( 'disk_free_space' ) ? @disk_free_space( WP_CONTENT_DIR ) : false; if ( $available_space && ( $uncompressed_size * 2.1 ) > $available_space ) { return new WP_Error( @@ -1802,7 +1802,7 @@ function _unzip_file_pclzip( $file, $to, $needed_dirs = array() ) { * Require we have enough space to unzip the file and copy its contents, with a 10% buffer. */ if ( wp_doing_cron() ) { - $available_space = @disk_free_space( WP_CONTENT_DIR ); + $available_space = function_exists( 'disk_free_space' ) ? @disk_free_space( WP_CONTENT_DIR ) : false; if ( $available_space && ( $uncompressed_size * 2.1 ) > $available_space ) { return new WP_Error( diff --git a/src/wp-admin/includes/update-core.php b/src/wp-admin/includes/update-core.php index 63538751ae..c150adc26f 100644 --- a/src/wp-admin/includes/update-core.php +++ b/src/wp-admin/includes/update-core.php @@ -1242,7 +1242,7 @@ function update_core( $from, $to ) { // If we don't have enough free space, it isn't worth trying again. // Unlikely to be hit due to the check in unzip_file(). - $available_space = @disk_free_space( ABSPATH ); + $available_space = function_exists( 'disk_free_space' ) ? @disk_free_space( ABSPATH ) : false; if ( $available_space && $total_size >= $available_space ) { $result = new WP_Error( 'disk_full', __( 'There is not enough free disk space to complete the update.' ) );