From 9715eaf6a7068c781aabfe297b118f77fbb74b64 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 09:05:04 +0000 Subject: [PATCH 1/6] chore(deps-dev): bump phpstan/phpstan from 2.1.31 to 2.1.32 --- updated-dependencies: - dependency-name: phpstan/phpstan dependency-version: 2.1.32 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- composer.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/composer.lock b/composer.lock index d743021e..18aefafa 100644 --- a/composer.lock +++ b/composer.lock @@ -904,11 +904,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.31", + "version": "2.1.32", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ead89849d879fe203ce9292c6ef5e7e76f867b96", - "reference": "ead89849d879fe203ce9292c6ef5e7e76f867b96", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e126cad1e30a99b137b8ed75a85a676450ebb227", + "reference": "e126cad1e30a99b137b8ed75a85a676450ebb227", "shasum": "" }, "require": { @@ -953,7 +953,7 @@ "type": "github" } ], - "time": "2025-10-10T14:14:11+00:00" + "time": "2025-11-11T15:18:17+00:00" }, { "name": "phpunit/php-code-coverage", From 49dffaf6a9c499df04e462e5ab47f773063f5fec Mon Sep 17 00:00:00 2001 From: Soare Robert-Daniel Date: Wed, 19 Nov 2025 17:09:54 +0200 Subject: [PATCH 2/6] fix: type verification for filter values Re-add the extra type verification for values that are computed with filters. --- inc/admin.php | 7 +++++-- inc/app_replacer.php | 10 +++++----- inc/tag_replacer.php | 15 +++++++++------ phpstan-baseline.neon | 12 ------------ 4 files changed, 19 insertions(+), 25 deletions(-) diff --git a/inc/admin.php b/inc/admin.php index 6f9f8884..0b5b705c 100755 --- a/inc/admin.php +++ b/inc/admin.php @@ -575,11 +575,14 @@ public function inline_bootstrap_script() { /** * Add settings links in the plugin listing page. * - * @param string[] $links Old plugin links. + * @param string[]|mixed $links Old plugin links. * - * @return string[] Altered links. + * @return string[]|mixed Altered links. */ public function add_action_links( $links ) { + if ( ! is_array( $links ) ) { + return $links; + } return array_merge( $links, [ diff --git a/inc/app_replacer.php b/inc/app_replacer.php index 6ed4dbc2..a76d7654 100644 --- a/inc/app_replacer.php +++ b/inc/app_replacer.php @@ -654,10 +654,10 @@ public function url_has_dam_flag( $url ) { /** * Get the optimized image url for the image url. * - * @param string $url The image URL. - * @param mixed $width The image width. - * @param mixed $height The image height. - * @param array $resize The resize properties. + * @param string $url The image URL. + * @param mixed $width The image width. + * @param mixed $height The image height. + * @param array|mixed $resize The resize properties. * * @return string */ @@ -668,7 +668,7 @@ protected function get_optimized_image_url( $url, $width, $height, $resize = [] ->width( $width ) ->height( $height ); - if ( ! empty( $resize['type'] ) ) { + if ( is_array( $resize ) && ! empty( $resize['type'] ) ) { $optimized_image->resize( $resize['type'], $resize['gravity'] ?? Position::CENTER, $resize['enlarge'] ?? false ); } diff --git a/inc/tag_replacer.php b/inc/tag_replacer.php index 75372f50..78cc5f87 100644 --- a/inc/tag_replacer.php +++ b/inc/tag_replacer.php @@ -809,15 +809,18 @@ public function change_url_for_size( $original_url, $width, $height, $dpr = 1 ) /** * Replace image URLs in the srcset attributes and in case there is a resize in action, also replace the sizes. * - * @param array $sources Array of image sources. - * @param array{0: int, 1: int}|int[] $size_array Array of width and height values in pixels (in that order). - * @param string $image_src The 'src' of the image. - * @param array $image_meta The image meta data as returned by 'wp_get_attachment_metadata()'. - * @param int $attachment_id Image attachment ID or 0. + * @param array|mixed $sources Array of image sources. + * @param array{0: int, 1: int}|int[] $size_array Array of width and height values in pixels (in that order). + * @param string $image_src The 'src' of the image. + * @param array $image_meta The image meta data as returned by 'wp_get_attachment_metadata()'. + * @param int $attachment_id Image attachment ID or 0. * - * @return array + * @return array|mixed */ public function filter_srcset_attr( $sources = [], $size_array = [], $image_src = '', $image_meta = [], $attachment_id = 0 ) { + if ( ! is_array( $sources ) ) { + return $sources; + } if ( Optml_Media_Offload::is_uploaded_image( $image_src ) ) { return $sources; } diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index deb5805c..a002da25 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -516,12 +516,6 @@ parameters: count: 1 path: inc/app_replacer.php - - - message: '#^Method Optml_App_Replacer\:\:get_optimized_image_url\(\) has parameter \$resize with no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: inc/app_replacer.php - - message: '#^Method Optml_App_Replacer\:\:get_upload_resource\(\) return type has no value type specified in iterable type array\.$#' identifier: missingType.iterableValue @@ -2790,12 +2784,6 @@ parameters: count: 1 path: inc/tag_replacer.php - - - message: '#^Method Optml_Tag_Replacer\:\:filter_srcset_attr\(\) return type has no value type specified in iterable type array\.$#' - identifier: missingType.iterableValue - count: 1 - path: inc/tag_replacer.php - - message: '#^Method Optml_Tag_Replacer\:\:init\(\) has no return type specified\.$#' identifier: missingType.return From a0cb5e05f36bdb20151f969f8723a3e0ba3b84d8 Mon Sep 17 00:00:00 2001 From: selul Date: Wed, 3 Dec 2025 15:01:30 +0200 Subject: [PATCH 3/6] attempt to fix https://wordpress.org/support/topic/fatal-error-on-lazy-load-is-breaking-woocommerce-add-to-cart-for-mix-and-match/ --- inc/lazyload_replacer.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/inc/lazyload_replacer.php b/inc/lazyload_replacer.php index 15fd4534..6d4ebb71 100644 --- a/inc/lazyload_replacer.php +++ b/inc/lazyload_replacer.php @@ -115,6 +115,11 @@ public static function get_background_lazyload_selectors() { return self::$background_lazyload_selectors; } + if ( ! isset( self::instance()->settings ) ) { + self::$background_lazyload_selectors = []; + + return self::$background_lazyload_selectors; + } if ( self::instance()->settings->get( 'bg_replacer' ) === 'disabled' ) { self::$background_lazyload_selectors = []; return self::$background_lazyload_selectors; From 4f49a2da77df2a1f820af6f147d5ccb43169d4f3 Mon Sep 17 00:00:00 2001 From: selul Date: Wed, 3 Dec 2025 15:09:39 +0200 Subject: [PATCH 4/6] attempt to fix https://wordpress.org/support/topic/fatal-error-on-lazy-load-is-breaking-woocommerce-add-to-cart-for-mix-and-match/ --- .github/workflows/test-php.yml | 2 +- inc/lazyload_replacer.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-php.yml b/.github/workflows/test-php.yml index 9d019b4d..f4d3c4d8 100644 --- a/.github/workflows/test-php.yml +++ b/.github/workflows/test-php.yml @@ -41,7 +41,7 @@ jobs: - name: Setup PHP version uses: shivammathur/setup-php@v2 with: - php-version: ${{ matrix.php-version }} + php-version: ${{ matrix.php-versions }} extensions: simplexml, mysql tools: phpunit-polyfills:1.1 - name: Checkout source code diff --git a/inc/lazyload_replacer.php b/inc/lazyload_replacer.php index 6d4ebb71..1284a71e 100644 --- a/inc/lazyload_replacer.php +++ b/inc/lazyload_replacer.php @@ -115,7 +115,7 @@ public static function get_background_lazyload_selectors() { return self::$background_lazyload_selectors; } - if ( ! isset( self::instance()->settings ) ) { + if ( self::instance()->settings === null ) { self::$background_lazyload_selectors = []; return self::$background_lazyload_selectors; From e6ef894a7a87cec7e43f04883c90f8c3dd4f25f1 Mon Sep 17 00:00:00 2001 From: selul Date: Wed, 3 Dec 2025 15:12:25 +0200 Subject: [PATCH 5/6] fix tests compats --- tests/test-lazyload-viewport.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test-lazyload-viewport.php b/tests/test-lazyload-viewport.php index dfeb8c66..93930c70 100644 --- a/tests/test-lazyload-viewport.php +++ b/tests/test-lazyload-viewport.php @@ -489,7 +489,7 @@ private function storeMockProfileData( $deviceType, $above_fold_images = [], $bgSelectors = [], - $lcpData = [], + $lcpData = [] ) { Optml_Manager::instance()->page_profiler->store( $profileId, From 4514c15ba346f510c1ebdd626468aef3536ddd47 Mon Sep 17 00:00:00 2001 From: selul Date: Wed, 3 Dec 2025 15:16:33 +0200 Subject: [PATCH 6/6] fix tests compats --- .github/workflows/test-php.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-php.yml b/.github/workflows/test-php.yml index f4d3c4d8..134fd5f2 100644 --- a/.github/workflows/test-php.yml +++ b/.github/workflows/test-php.yml @@ -28,7 +28,7 @@ jobs: strategy: fail-fast: false matrix: - php-versions: [ '7.4', '8.0', '8.1', '8.2', '8.3' ] + php-versions: [ '8.0', '8.1', '8.2', '8.3' ] services: database: image: mysql:latest