From 97a829578ea0338b8ee31bc7790225c4d83b9804 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Feb 2026 20:26:45 +0000 Subject: [PATCH 1/4] Initial plan From f3888d1de9eb26268055fa969856f0a55ec32aba Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Feb 2026 20:37:32 +0000 Subject: [PATCH 2/4] Fix preg_match compilation error by suppressing invalid regex warnings Co-authored-by: mustafauysal <1421387+mustafauysal@users.noreply.github.com> --- includes/dropins/page-cache.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/dropins/page-cache.php b/includes/dropins/page-cache.php index 47d1192..cfb5a7a 100644 --- a/includes/dropins/page-cache.php +++ b/includes/dropins/page-cache.php @@ -173,7 +173,7 @@ continue; } - if ( preg_match( '#^(' . $exception . ')$#', $_SERVER['REQUEST_URI'] ) ) { + if ( @preg_match( '#^(' . $exception . ')$#', $_SERVER['REQUEST_URI'] ) ) { powered_cache_add_cache_miss_header( "Rejected page" ); return; From c95b8b77e6e9c021811a4f23ddad2532fded5153 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Feb 2026 20:38:44 +0000 Subject: [PATCH 3/4] Apply error suppression to all user-provided regex patterns Co-authored-by: mustafauysal <1421387+mustafauysal@users.noreply.github.com> --- includes/dropins/page-cache.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/includes/dropins/page-cache.php b/includes/dropins/page-cache.php index cfb5a7a..46b16e6 100644 --- a/includes/dropins/page-cache.php +++ b/includes/dropins/page-cache.php @@ -62,7 +62,7 @@ // Don't cache page with these user agents if ( isset( $powered_cache_rejected_user_agents ) && ! empty( $powered_cache_rejected_user_agents ) ) { $rejected_user_agents = implode( '|', $powered_cache_rejected_user_agents ); - if ( ! empty( $rejected_user_agents ) && isset( $_SERVER['HTTP_USER_AGENT'] ) && preg_match( '#(' . $rejected_user_agents . ')#', $_SERVER['HTTP_USER_AGENT'] ) ) { + if ( ! empty( $rejected_user_agents ) && isset( $_SERVER['HTTP_USER_AGENT'] ) && @preg_match( '#(' . $rejected_user_agents . ')#', $_SERVER['HTTP_USER_AGENT'] ) ) { powered_cache_add_cache_miss_header( "Rejected user agent" ); return; @@ -150,7 +150,7 @@ if ( ! empty( $powered_cache_rejected_cookies ) ) { $rejected_cookies = array_diff( $powered_cache_rejected_cookies, $wp_cookies, $comment_cookies, ['powered_cache_commented_posts'] ); $rejected_cookies = implode( '|', $rejected_cookies ); - if ( preg_match( '#(' . $rejected_cookies . ')#', var_export( $_COOKIE, true ) ) ) { + if ( @preg_match( '#(' . $rejected_cookies . ')#', var_export( $_COOKIE, true ) ) ) { powered_cache_add_cache_miss_header( "Rejected cookie" ); return; } From 80c0af32777a64b2e40c697a46550fdea391b260 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Feb 2026 20:48:17 +0000 Subject: [PATCH 4/4] Replace error suppression with proper regex validation per WP standards Co-authored-by: mustafauysal <1421387+mustafauysal@users.noreply.github.com> --- includes/dropins/page-cache.php | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/includes/dropins/page-cache.php b/includes/dropins/page-cache.php index 46b16e6..b19b44c 100644 --- a/includes/dropins/page-cache.php +++ b/includes/dropins/page-cache.php @@ -62,10 +62,15 @@ // Don't cache page with these user agents if ( isset( $powered_cache_rejected_user_agents ) && ! empty( $powered_cache_rejected_user_agents ) ) { $rejected_user_agents = implode( '|', $powered_cache_rejected_user_agents ); - if ( ! empty( $rejected_user_agents ) && isset( $_SERVER['HTTP_USER_AGENT'] ) && @preg_match( '#(' . $rejected_user_agents . ')#', $_SERVER['HTTP_USER_AGENT'] ) ) { - powered_cache_add_cache_miss_header( "Rejected user agent" ); + if ( ! empty( $rejected_user_agents ) && isset( $_SERVER['HTTP_USER_AGENT'] ) ) { + // Validate regex pattern before using it + $pattern = '#(' . $rejected_user_agents . ')#'; + @preg_match( $pattern, '' ); + if ( PREG_NO_ERROR === preg_last_error() && preg_match( $pattern, $_SERVER['HTTP_USER_AGENT'] ) ) { + powered_cache_add_cache_miss_header( "Rejected user agent" ); - return; + return; + } } } @@ -150,7 +155,10 @@ if ( ! empty( $powered_cache_rejected_cookies ) ) { $rejected_cookies = array_diff( $powered_cache_rejected_cookies, $wp_cookies, $comment_cookies, ['powered_cache_commented_posts'] ); $rejected_cookies = implode( '|', $rejected_cookies ); - if ( @preg_match( '#(' . $rejected_cookies . ')#', var_export( $_COOKIE, true ) ) ) { + // Validate regex pattern before using it + $pattern = '#(' . $rejected_cookies . ')#'; + @preg_match( $pattern, '' ); + if ( PREG_NO_ERROR === preg_last_error() && preg_match( $pattern, var_export( $_COOKIE, true ) ) ) { powered_cache_add_cache_miss_header( "Rejected cookie" ); return; } @@ -173,7 +181,10 @@ continue; } - if ( @preg_match( '#^(' . $exception . ')$#', $_SERVER['REQUEST_URI'] ) ) { + // Validate regex pattern before using it + $pattern = '#^(' . $exception . ')$#'; + @preg_match( $pattern, '' ); + if ( PREG_NO_ERROR === preg_last_error() && preg_match( $pattern, $_SERVER['REQUEST_URI'] ) ) { powered_cache_add_cache_miss_header( "Rejected page" ); return;