From adabdc736a53bf85813dd9b579724bf060024953 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donncha=20=C3=93=20Caoimh?= <5656673+donnchawp@users.noreply.github.com> Date: Mon, 2 Dec 2024 14:10:52 +0000 Subject: [PATCH] WPSC: Check that there is cached content to display in browser (#40342) Check that there is cached content to display in browser --- ...date-super-cache-cache-file-race-condition | 4 +++ .../plugins/super-cache/wp-cache-phase2.php | 31 +++++++++++++++++-- 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 projects/plugins/super-cache/changelog/update-super-cache-cache-file-race-condition diff --git a/projects/plugins/super-cache/changelog/update-super-cache-cache-file-race-condition b/projects/plugins/super-cache/changelog/update-super-cache-cache-file-race-condition new file mode 100644 index 0000000000000..142a0ba3b9648 --- /dev/null +++ b/projects/plugins/super-cache/changelog/update-super-cache-cache-file-race-condition @@ -0,0 +1,4 @@ +Significance: patch +Type: fixed + +Caching: make sure there is cache content to serve, even if the cache file was found diff --git a/projects/plugins/super-cache/wp-cache-phase2.php b/projects/plugins/super-cache/wp-cache-phase2.php index 392d25bf258d0..44287b4635f1e 100644 --- a/projects/plugins/super-cache/wp-cache-phase2.php +++ b/projects/plugins/super-cache/wp-cache-phase2.php @@ -227,18 +227,44 @@ function wp_cache_serve_cache_file() { if ( $wp_cache_gzip_encoding ) { if ( file_exists( $file . '.gz' ) ) { $cachefiledata = file_get_contents( $file . '.gz' ); + + if ( false === $cachefiledata ) { + wp_cache_debug( 'The cached gzip file could not be read. Must generate a new one.' ); + return false; + } + wp_cache_debug( "Fetched gzip static page data from supercache file using PHP. File: $file.gz" ); } else { - $cachefiledata = gzencode( file_get_contents( $file ), 6, FORCE_GZIP ); + $cachefiledata = file_get_contents( $file ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents + + if ( false === $cachefiledata ) { + wp_cache_debug( 'The cached file could not be read. Must generate a new one.' ); + return false; + } + + $cachefiledata = gzencode( $cachefiledata, 6, FORCE_GZIP ); wp_cache_debug( "Fetched static page data from supercache file using PHP and gzipped it. File: $file" ); } } else { $cachefiledata = file_get_contents( $file ); + + if ( false === $cachefiledata ) { + wp_cache_debug( 'The cached file could not be read. Must generate a new one.' ); + return false; + } + wp_cache_debug( "Fetched static page data from supercache file using PHP. File: $file" ); } } else { // get dynamic data from filtered file - $cachefiledata = do_cacheaction( 'wpsc_cachedata', file_get_contents( $file ) ); + $cachefiledata = file_get_contents( $file ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents + + if ( false === $cachefiledata ) { + wp_cache_debug( 'The cached file could not be read. Must generate a new one.' ); + return false; + } + + $cachefiledata = do_cacheaction( 'wpsc_cachedata', $cachefiledata ); if ( $wp_cache_gzip_encoding ) { $cachefiledata = gzencode( $cachefiledata, 6, FORCE_GZIP ); wp_cache_debug( "Fetched dynamic page data from supercache file using PHP and gzipped it. File: $file" ); @@ -301,6 +327,7 @@ function wp_cache_serve_cache_file() { } header( 'Last-Modified: ' . $local_mod_time ); } + echo $cachefiledata; exit(); } else {