From 269d91ee055094baf409c2fcc04559e2c6235769 Mon Sep 17 00:00:00 2001 From: Nate Weller Date: Mon, 6 Jan 2025 13:55:16 -0700 Subject: [PATCH] Combine multiple vulnerabilities for a single extension into one vulnerable extension threat changelog minor adjustments changelog add source to generator minor adjustments Add typed params minor adjustments use generator for core vulns threat update tests, minor adjustments adjust tests Fix phan issues add jetpack-redirect dep fix tests update lock files changelog Update projects/packages/protect-models/changelog/protect-status-combine-vulns-into-extension-threat --- ...status-combine-vulns-into-extension-threat | 4 + .../packages/protect-models/composer.json | 3 +- .../protect-models/src/class-threat-model.php | 123 +++++++++ .../src/class-vulnerability-model.php | 94 +++++++ .../changelog/combine-vulns-into-threat | 4 + .../src/class-protect-status.php | 61 +++-- .../protect-status/tests/php/test-status.php | 240 +++++++++--------- .../plugins/backup/changelog/update-lock-file | 4 + projects/plugins/backup/composer.lock | 1 + .../plugins/boost/changelog/update-lock-file | 4 + projects/plugins/boost/composer.lock | 1 + .../jetpack/changelog/update-lock-file | 4 + projects/plugins/jetpack/composer.lock | 1 + .../protect/changelog/update-lock-file | 4 + projects/plugins/protect/composer.lock | 1 + .../plugins/search/changelog/update-lock-file | 4 + projects/plugins/search/composer.lock | 1 + .../plugins/social/changelog/update-lock-file | 4 + projects/plugins/social/composer.lock | 1 + .../starter-plugin/changelog/update-lock-file | 4 + projects/plugins/starter-plugin/composer.lock | 1 + .../videopress/changelog/update-lock-file | 4 + projects/plugins/videopress/composer.lock | 1 + 23 files changed, 424 insertions(+), 145 deletions(-) create mode 100644 projects/packages/protect-models/changelog/protect-status-combine-vulns-into-extension-threat create mode 100644 projects/packages/protect-models/src/class-vulnerability-model.php create mode 100644 projects/packages/protect-status/changelog/combine-vulns-into-threat create mode 100644 projects/plugins/backup/changelog/update-lock-file create mode 100644 projects/plugins/boost/changelog/update-lock-file create mode 100644 projects/plugins/jetpack/changelog/update-lock-file create mode 100644 projects/plugins/protect/changelog/update-lock-file create mode 100644 projects/plugins/search/changelog/update-lock-file create mode 100644 projects/plugins/social/changelog/update-lock-file create mode 100644 projects/plugins/starter-plugin/changelog/update-lock-file create mode 100644 projects/plugins/videopress/changelog/update-lock-file diff --git a/projects/packages/protect-models/changelog/protect-status-combine-vulns-into-extension-threat b/projects/packages/protect-models/changelog/protect-status-combine-vulns-into-extension-threat new file mode 100644 index 0000000000000..de7eb71625663 --- /dev/null +++ b/projects/packages/protect-models/changelog/protect-status-combine-vulns-into-extension-threat @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Combine vulnerabilities for the same extension into single vulnerable extension threats. diff --git a/projects/packages/protect-models/composer.json b/projects/packages/protect-models/composer.json index 7664fbeff894f..1edebbaf5a3d5 100644 --- a/projects/packages/protect-models/composer.json +++ b/projects/packages/protect-models/composer.json @@ -4,7 +4,8 @@ "type": "jetpack-library", "license": "GPL-2.0-or-later", "require": { - "php": ">=7.2" + "php": ">=7.2", + "automattic/jetpack-redirect": "@dev" }, "require-dev": { "yoast/phpunit-polyfills": "^1.1.1", diff --git a/projects/packages/protect-models/src/class-threat-model.php b/projects/packages/protect-models/src/class-threat-model.php index bf8add53d530e..c588953468106 100644 --- a/projects/packages/protect-models/src/class-threat-model.php +++ b/projects/packages/protect-models/src/class-threat-model.php @@ -119,6 +119,15 @@ class Threat_Model { */ public $extension; + /** + * The threat's related vulnerabilities. + * + * @since $$next-version$$ + * + * @var null|Vulnerability_Model[] + */ + public $vulnerabilities; + /** * Threat Constructor * @@ -139,4 +148,118 @@ public function __construct( $threat ) { } } } + + /** + * Get the ID value of the threat based on its related extension and vulnerabilities. + * + * @since $$next-version$$ + * + * @param Extension_Model $extension The extension to get the ID from. + * + * @return string + */ + private static function get_id_from_vulnerable_extension( Extension_Model $extension ) { + return "$extension->type-$extension->slug-$extension->version"; + } + + /** + * Get the title from a vulnerable extension. + * + * @since $$next-version$$ + * + * @param Extension_Model $extension The extension to get the title from. + * + * @return string|null + */ + private static function get_title_from_vulnerable_extension( Extension_Model $extension ) { + $titles = array( + 'plugins' => sprintf( + /* translators: placeholders are the theme name and version number. Example: "Vulnerable theme: Jetpack (version 1.2.3)" */ + __( 'Vulnerable plugin: %1$s (version %2$s)', 'jetpack-protect-models' ), + $extension->name, + $extension->version + ), + 'themes' => sprintf( + /* translators: placeholders are the theme name and version number. Example: "Vulnerable theme: Jetpack (version 1.2.3)" */ + __( 'Vulnerable theme: %1$s (version %2$s)', 'jetpack-protect-models' ), + $extension->name, + $extension->version + ), + 'core' => sprintf( + /* translators: placeholder is the version number. Example: "Vulnerable WordPress (version 1.2.3)" */ + __( 'Vulnerable WordPress (version %s)', 'jetpack-protect-models' ), + $extension->version + ), + ); + + return $titles[ $extension->type ] ?? null; + } + + /** + * Get the description from a vulnerable extension. + * + * @since $$next-version$$ + * + * @param Extension_Model $extension The extension to get the description from. + * @param array $vulnerabilities The vulnerabilities to get the description from. + * + * @return string + */ + private static function get_description_from_vulnerable_extension( Extension_Model $extension, array $vulnerabilities ) { + return sprintf( + /* translators: placeholders are the theme name and version number. Example: "The installed version of Jetpack (1.2.3) has a known security vulnerability." */ + _n( 'The installed version of %1$s (%2$s) has a known security vulnerability.', 'The installed version of %1$s (%2$s) has known security vulnerabilities.', count( $vulnerabilities ), 'jetpack-protect-models' ), + $extension->name, + $extension->version + ); + } + + /** + * Get the latest fixed_in version from a list of vulnerabilities. + * + * @since $$next-version$$ + * + * @param array $vulnerabilities The vulnerabilities to get the fixed_in version from. + * + * @return string|bool|null The latest fixed_in version, or false if any of the vulnerabilities are not fixed. + */ + private static function get_fixed_in_from_vulnerabilities( array $vulnerabilities ) { + $fixed_in = null; + + foreach ( $vulnerabilities as $vulnerability ) { + // If any of the vulnerabilities are not fixed, the threat is not fixed. + if ( ! $vulnerability->fixed_in ) { + break; + } + + // Use the latest available fixed_in version. + if ( ! $fixed_in || ( $fixed_in && version_compare( $vulnerability->fixed_in, $fixed_in, '>' ) ) ) { + $fixed_in = $vulnerability->fixed_in; + } + } + + return $fixed_in; + } + + /** + * Generate a threat from extension vulnerabilities. + * + * @since $$next-version$$ + * + * @param Extension_Model $extension The extension to generate the threat for. + * @param Vulnerability_Model[] $vulnerabilities The vulnerabilities to generate the threat from. + * + * @return Threat_Model + */ + public static function generate_from_extension_vulnerabilities( Extension_Model $extension, array $vulnerabilities ) { + return new Threat_Model( + array( + 'id' => self::get_id_from_vulnerable_extension( $extension ), + 'title' => self::get_title_from_vulnerable_extension( $extension ), + 'description' => self::get_description_from_vulnerable_extension( $extension, $vulnerabilities ), + 'fixed_in' => self::get_fixed_in_from_vulnerabilities( $vulnerabilities ), + 'vulnerabilities' => $vulnerabilities, + ) + ); + } } diff --git a/projects/packages/protect-models/src/class-vulnerability-model.php b/projects/packages/protect-models/src/class-vulnerability-model.php new file mode 100644 index 0000000000000..210d5dc1aa74e --- /dev/null +++ b/projects/packages/protect-models/src/class-vulnerability-model.php @@ -0,0 +1,94 @@ + $value ) { + if ( property_exists( $this, $property ) ) { + $this->$property = $value; + } + } + + // Ensure the source URL is set. + $this->get_source(); + } + + /** + * Get the source URL for the threat. + * + * @return string + */ + public function get_source() { + if ( empty( $this->source ) && $this->id ) { + $this->source = Redirect::get_url( 'jetpack-protect-vul-info', array( 'path' => $this->id ) ); + } + + return $this->source; + } +} diff --git a/projects/packages/protect-status/changelog/combine-vulns-into-threat b/projects/packages/protect-status/changelog/combine-vulns-into-threat new file mode 100644 index 0000000000000..b35e964631a8c --- /dev/null +++ b/projects/packages/protect-status/changelog/combine-vulns-into-threat @@ -0,0 +1,4 @@ +Significance: minor +Type: changed + +Combine multiple vulnerability results for the same extension into a single vulnerable extension threat result. diff --git a/projects/packages/protect-status/src/class-protect-status.php b/projects/packages/protect-status/src/class-protect-status.php index 6a2aa2e0361eb..d09bf0ca6194c 100644 --- a/projects/packages/protect-status/src/class-protect-status.php +++ b/projects/packages/protect-status/src/class-protect-status.php @@ -15,7 +15,7 @@ use Automattic\Jetpack\Protect_Models\Extension_Model; use Automattic\Jetpack\Protect_Models\Status_Model; use Automattic\Jetpack\Protect_Models\Threat_Model; -use Automattic\Jetpack\Redirect; +use Automattic\Jetpack\Protect_Models\Vulnerability_Model; use Automattic\Jetpack\Sync\Functions as Sync_Functions; use Jetpack_Options; use WP_Error; @@ -223,21 +223,29 @@ protected static function normalize_extension_data( &$status, $report_data, $ext continue; } - $extension->checked = true; + $extension->checked = true; + $extension_threats[ $slug ] = $extension; - foreach ( $checked_extension->vulnerabilities as $vulnerability ) { - $threat = new Threat_Model( $vulnerability ); - $threat->source = isset( $vulnerability->id ) ? Redirect::get_url( 'jetpack-protect-vul-info', array( 'path' => $vulnerability->id ) ) : null; + if ( ! empty( $checked_extension->vulnerabilities ) ) { + // normalize the vulnerabilities data + $vulnerabilities = array_map( + function ( $vulnerability ) { + return new Vulnerability_Model( $vulnerability ); + }, + $checked_extension->vulnerabilities + ); + + // convert the detected vulnerabilities into a vulnerable extension threat + $threat = Threat_Model::generate_from_extension_vulnerabilities( $extension, $vulnerabilities ); - $threat_extension = clone $extension; - $extension_threat = clone $threat; - $extension_threat->extension = null; + $threat_extension = clone $extension; + $extension_threat = clone $threat; + $extension_threat->extension = null; $extension_threats[ $slug ]->threats[] = $extension_threat; $threat->extension = $threat_extension; $status->threats[] = $threat; - } } @@ -282,27 +290,26 @@ protected static function normalize_core_data( &$status, $report_data ) { // If we've made it this far, the core version has been checked. $core->checked = true; - // Extract threat data from the report. - if ( is_array( $report_data->core->vulnerabilities ) ) { - foreach ( $report_data->core->vulnerabilities as $vulnerability ) { - $threat = new Threat_Model( - array( - 'id' => $vulnerability->id, - 'title' => $vulnerability->title, - 'fixed_in' => $vulnerability->fixed_in, - 'description' => isset( $vulnerability->description ) ? $vulnerability->description : null, - 'source' => isset( $vulnerability->id ) ? Redirect::get_url( 'jetpack-protect-vul-info', array( 'path' => $vulnerability->id ) ) : null, - ) - ); + // Generate a threat from core vulnerabilities. + if ( ! empty( $report_data->core->vulnerabilities ) ) { + // normalize the vulnerabilities data + $vulnerabilities = array_map( + function ( $vulnerability ) { + return new Vulnerability_Model( $vulnerability ); + }, + $report_data->core->vulnerabilities + ); - $threat_extension = clone $core; - $extension_threat = clone $threat; + // convert the detected vulnerabilities into a vulnerable extension threat + $threat = Threat_Model::generate_from_extension_vulnerabilities( $core, $vulnerabilities ); - $core->threats[] = $extension_threat; - $threat->extension = $threat_extension; + $threat_extension = clone $core; + $extension_threat = clone $threat; - $status->threats[] = $threat; - } + $core->threats[] = $extension_threat; + $threat->extension = $threat_extension; + + $status->threats[] = $threat; } $status->core = $core; diff --git a/projects/packages/protect-status/tests/php/test-status.php b/projects/packages/protect-status/tests/php/test-status.php index 728c83f537537..0416524cca1c3 100644 --- a/projects/packages/protect-status/tests/php/test-status.php +++ b/projects/packages/protect-status/tests/php/test-status.php @@ -13,6 +13,7 @@ use Automattic\Jetpack\Protect_Models\Extension_Model; use Automattic\Jetpack\Protect_Models\Status_Model; use Automattic\Jetpack\Protect_Models\Threat_Model; +use Automattic\Jetpack\Protect_Models\Vulnerability_Model; use Jetpack_Options; use WorDBless\BaseTestCase; @@ -103,14 +104,14 @@ public function get_sample_api_response() { 'themes' => (object) array( 'theme-1' => (object) array( 'slug' => 'theme-1', - 'name' => 'Sample Theme', + 'name' => 'Sample Theme 1', 'version' => '1.0.2', 'checked' => true, 'vulnerabilities' => array( (object) array( 'id' => 'test-vuln-1', 'title' => 'Test Vuln 1', - 'fixed_in' => '2.0.0', + 'fixed_in' => '1.0.0', ), ), ), @@ -118,7 +119,7 @@ public function get_sample_api_response() { 'plugins' => (object) array( 'plugin-1' => (object) array( 'slug' => 'plugin-1', - 'name' => 'Sample Plugin', + 'name' => 'Sample Plugin 1', 'version' => '1.0.2', 'checked' => true, 'vulnerabilities' => array( @@ -131,7 +132,7 @@ public function get_sample_api_response() { ), 'plugin-2' => (object) array( 'slug' => 'plugin-2', - 'name' => 'Sample Plugin', + 'name' => 'Sample Plugin 2', 'version' => '1.0.2', 'checked' => true, 'vulnerabilities' => array(), @@ -144,7 +145,7 @@ public function get_sample_api_response() { (object) array( 'id' => 'test-vuln-3', 'title' => 'Test Vuln 3', - 'fixed_in' => '2.0.0', + 'fixed_in' => null, ), ), 'name' => 'WordPress', @@ -155,11 +156,118 @@ public function get_sample_api_response() { /** * Get a sample result of Protect_Status::get_status(). * + * @phan-suppress PhanDeprecatedProperty -- Testing backwards compatibility. + * * @return object */ public function get_sample_status() { global $wp_version; + $vulnerability_1 = new Vulnerability_Model( + array( + 'id' => 'test-vuln-1', + 'title' => 'Test Vuln 1', + 'fixed_in' => '1.0.0', + ) + ); + + $vulnerability_2 = new Vulnerability_Model( + array( + 'id' => 'test-vuln-2', + 'title' => 'Test Vuln 2', + 'fixed_in' => '2.0.0', + ) + ); + + $vulnerability_3 = new Vulnerability_Model( + array( + 'id' => 'test-vuln-3', + 'title' => 'Test Vuln 3', + 'fixed_in' => null, + ) + ); + + $plugin_1 = new Extension_Model( + array( + 'version' => '1.0.2', + 'name' => 'Sample Plugin 1', + 'checked' => true, + 'type' => 'plugins', + 'slug' => 'plugin-1', + ) + ); + + $theme_1 = new Extension_Model( + array( + 'version' => '1.0.2', + 'name' => 'Sample Theme 1', + 'checked' => true, + 'type' => 'themes', + 'slug' => 'theme-1', + ) + ); + + $core = new Extension_Model( + array( + 'version' => $wp_version, + 'name' => 'WordPress', + 'checked' => true, + 'type' => 'core', + 'slug' => 'wordpress', + ) + ); + + $plugin_1_threat = new Threat_Model( + array( + 'id' => 'plugins-plugin-1-1.0.2', + 'title' => 'Vulnerable plugin: Sample Plugin 1 (version 1.0.2)', + 'description' => 'The installed version of Sample Plugin 1 (1.0.2) has a known security vulnerability.', + 'fixed_in' => '2.0.0', + 'source' => null, + 'vulnerabilities' => array( $vulnerability_2 ), + ) + ); + + $theme_1_threat = new Threat_Model( + array( + 'id' => 'themes-theme-1-1.0.2', + 'title' => 'Vulnerable theme: Sample Theme 1 (version 1.0.2)', + 'description' => 'The installed version of Sample Theme 1 (1.0.2) has a known security vulnerability.', + 'fixed_in' => '1.0.0', + 'source' => null, + 'vulnerabilities' => array( $vulnerability_1 ), + ) + ); + + $core_threat = new Threat_Model( + array( + 'id' => 'core-wordpress-' . $wp_version, + 'title' => 'Vulnerable WordPress (version ' . $wp_version . ')', + 'description' => 'The installed version of WordPress (' . $wp_version . ') has a known security vulnerability.', + 'fixed_in' => null, + 'source' => null, + 'vulnerabilities' => array( $vulnerability_3 ), + ) + ); + + $core_threat_with_extension = clone $core_threat; + $core_threat_with_extension->extension = $core; + + $plugin_1_threat_with_extension = clone $plugin_1_threat; + $plugin_1_threat_with_extension->extension = $plugin_1; + + $theme_1_threat_with_extension = clone $theme_1_threat; + $theme_1_threat_with_extension->extension = $theme_1; + + $plugin_1_with_threats = clone $plugin_1; + $plugin_1_with_threats->threats = array( $plugin_1_threat ); + + $theme_1_with_threats = clone $theme_1; + $theme_1_with_threats->threats = array( $theme_1_threat ); + + $core_with_threats = clone $core; + $core_with_threats->threats = array( $core_threat ); + return new Status_Model( array( 'data_source' => 'protect_report', @@ -172,125 +280,23 @@ public function get_sample_status() { new Extension_Model( array( 'version' => '1.0.2', - 'name' => 'Sample Plugin', + 'name' => 'Sample Plugin 2', 'checked' => true, 'type' => 'plugins', 'threats' => array(), 'slug' => 'plugin-2', ) ), - new Extension_Model( - array( - 'version' => '1.0.2', - 'name' => 'Sample Plugin', - 'checked' => true, - 'type' => 'plugins', - 'threats' => array( - new Threat_Model( - array( - 'id' => 'test-vuln-2', - 'title' => 'Test Vuln 2', - 'fixed_in' => '2.0.0', - 'source' => 'https://jetpack.com/redirect/?source=jetpack-protect-vul-info&site=example.org&path=test-vuln-2', - ) - ), - ), - 'slug' => 'plugin-1', - ) - ), + $plugin_1_with_threats, ), 'themes' => array( - new Extension_Model( - array( - 'version' => '1.0.2', - 'name' => 'Sample Theme', - 'checked' => true, - 'type' => 'themes', - 'threats' => array( - new Threat_Model( - array( - 'id' => 'test-vuln-1', - 'title' => 'Test Vuln 1', - 'fixed_in' => '2.0.0', - 'source' => 'https://jetpack.com/redirect/?source=jetpack-protect-vul-info&site=example.org&path=test-vuln-1', - ) - ), - ), - 'slug' => 'theme-1', - ) - ), - ), - 'core' => new Extension_Model( - array( - 'version' => $wp_version, - 'threats' => array( - new Threat_Model( - array( - 'id' => 'test-vuln-3', - 'title' => 'Test Vuln 3', - 'fixed_in' => '2.0.0', - 'source' => 'https://jetpack.com/redirect/?source=jetpack-protect-vul-info&site=example.org&path=test-vuln-3', - ) - ), - ), - 'checked' => true, - 'name' => 'WordPress', - 'slug' => 'wordpress', - 'type' => 'core', - ) + $theme_1_with_threats, ), + 'core' => $core_with_threats, 'threats' => array( - new Threat_Model( - array( - 'id' => 'test-vuln-1', - 'title' => 'Test Vuln 1', - 'fixed_in' => '2.0.0', - 'source' => 'https://jetpack.com/redirect/?source=jetpack-protect-vul-info&site=example.org&path=test-vuln-1', - 'extension' => new Extension_Model( - array( - 'version' => '1.0.2', - 'name' => 'Sample Theme', - 'checked' => true, - 'type' => 'themes', - 'slug' => 'theme-1', - ) - ), - ) - ), - new Threat_Model( - array( - 'id' => 'test-vuln-2', - 'title' => 'Test Vuln 2', - 'fixed_in' => '2.0.0', - 'source' => 'https://jetpack.com/redirect/?source=jetpack-protect-vul-info&site=example.org&path=test-vuln-2', - 'extension' => new Extension_Model( - array( - 'version' => '1.0.2', - 'name' => 'Sample Plugin', - 'checked' => true, - 'type' => 'plugins', - 'slug' => 'plugin-1', - ) - ), - ) - ), - new Threat_Model( - array( - 'id' => 'test-vuln-3', - 'title' => 'Test Vuln 3', - 'fixed_in' => '2.0.0', - 'source' => 'https://jetpack.com/redirect/?source=jetpack-protect-vul-info&site=example.org&path=test-vuln-3', - 'extension' => new Extension_Model( - array( - 'version' => $wp_version, - 'name' => 'WordPress', - 'checked' => true, - 'type' => 'core', - 'slug' => 'wordpress', - ) - ), - ) - ), + $theme_1_threat_with_extension, + $plugin_1_threat_with_extension, + $core_threat_with_extension, ), ) ); @@ -319,11 +325,11 @@ public function return_sample_response() { public function return_sample_plugins() { return array( 'plugin-1' => array( - 'Name' => 'Sample Plugin', + 'Name' => 'Sample Plugin 1', 'Version' => '1.0.2', ), 'plugin-2' => array( - 'Name' => 'Sample Plugin', + 'Name' => 'Sample Plugin 2', 'Version' => '1.0.2', ), ); @@ -337,7 +343,7 @@ public function return_sample_plugins() { public function return_sample_themes() { return array( 'theme-1' => array( - 'Name' => 'Sample Theme', + 'Name' => 'Sample Theme 1', 'Version' => '1.0.2', ), ); diff --git a/projects/plugins/backup/changelog/update-lock-file b/projects/plugins/backup/changelog/update-lock-file new file mode 100644 index 0000000000000..b6c4ffc2f7e11 --- /dev/null +++ b/projects/plugins/backup/changelog/update-lock-file @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated composer.lock diff --git a/projects/plugins/backup/composer.lock b/projects/plugins/backup/composer.lock index 9500dd5df1743..1fd32892e395d 100644 --- a/projects/plugins/backup/composer.lock +++ b/projects/plugins/backup/composer.lock @@ -1434,6 +1434,7 @@ "reference": "6b8a84b23ab688f32c77c37bf835ef2b9d3ef6b1" }, "require": { + "automattic/jetpack-redirect": "@dev", "php": ">=7.2" }, "require-dev": { diff --git a/projects/plugins/boost/changelog/update-lock-file b/projects/plugins/boost/changelog/update-lock-file new file mode 100644 index 0000000000000..b6c4ffc2f7e11 --- /dev/null +++ b/projects/plugins/boost/changelog/update-lock-file @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated composer.lock diff --git a/projects/plugins/boost/composer.lock b/projects/plugins/boost/composer.lock index 974a3ca7adcac..7b77fe4e06826 100644 --- a/projects/plugins/boost/composer.lock +++ b/projects/plugins/boost/composer.lock @@ -1424,6 +1424,7 @@ "reference": "6b8a84b23ab688f32c77c37bf835ef2b9d3ef6b1" }, "require": { + "automattic/jetpack-redirect": "@dev", "php": ">=7.2" }, "require-dev": { diff --git a/projects/plugins/jetpack/changelog/update-lock-file b/projects/plugins/jetpack/changelog/update-lock-file new file mode 100644 index 0000000000000..b327150ba8075 --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-lock-file @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Update composer.lock diff --git a/projects/plugins/jetpack/composer.lock b/projects/plugins/jetpack/composer.lock index 9fa189498b6e9..be6fd35acc7df 100644 --- a/projects/plugins/jetpack/composer.lock +++ b/projects/plugins/jetpack/composer.lock @@ -2062,6 +2062,7 @@ "reference": "6b8a84b23ab688f32c77c37bf835ef2b9d3ef6b1" }, "require": { + "automattic/jetpack-redirect": "@dev", "php": ">=7.2" }, "require-dev": { diff --git a/projects/plugins/protect/changelog/update-lock-file b/projects/plugins/protect/changelog/update-lock-file new file mode 100644 index 0000000000000..b6c4ffc2f7e11 --- /dev/null +++ b/projects/plugins/protect/changelog/update-lock-file @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated composer.lock diff --git a/projects/plugins/protect/composer.lock b/projects/plugins/protect/composer.lock index cd1cff1cd428f..94403ea8a5f5f 100644 --- a/projects/plugins/protect/composer.lock +++ b/projects/plugins/protect/composer.lock @@ -1350,6 +1350,7 @@ "reference": "6b8a84b23ab688f32c77c37bf835ef2b9d3ef6b1" }, "require": { + "automattic/jetpack-redirect": "@dev", "php": ">=7.2" }, "require-dev": { diff --git a/projects/plugins/search/changelog/update-lock-file b/projects/plugins/search/changelog/update-lock-file new file mode 100644 index 0000000000000..b6c4ffc2f7e11 --- /dev/null +++ b/projects/plugins/search/changelog/update-lock-file @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated composer.lock diff --git a/projects/plugins/search/composer.lock b/projects/plugins/search/composer.lock index e48068e900a3b..3f264a236ffa0 100644 --- a/projects/plugins/search/composer.lock +++ b/projects/plugins/search/composer.lock @@ -1296,6 +1296,7 @@ "reference": "6b8a84b23ab688f32c77c37bf835ef2b9d3ef6b1" }, "require": { + "automattic/jetpack-redirect": "@dev", "php": ">=7.2" }, "require-dev": { diff --git a/projects/plugins/social/changelog/update-lock-file b/projects/plugins/social/changelog/update-lock-file new file mode 100644 index 0000000000000..b6c4ffc2f7e11 --- /dev/null +++ b/projects/plugins/social/changelog/update-lock-file @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated composer.lock diff --git a/projects/plugins/social/composer.lock b/projects/plugins/social/composer.lock index 83745021c30be..c71bc5a19b9a1 100644 --- a/projects/plugins/social/composer.lock +++ b/projects/plugins/social/composer.lock @@ -1355,6 +1355,7 @@ "reference": "6b8a84b23ab688f32c77c37bf835ef2b9d3ef6b1" }, "require": { + "automattic/jetpack-redirect": "@dev", "php": ">=7.2" }, "require-dev": { diff --git a/projects/plugins/starter-plugin/changelog/update-lock-file b/projects/plugins/starter-plugin/changelog/update-lock-file new file mode 100644 index 0000000000000..b6c4ffc2f7e11 --- /dev/null +++ b/projects/plugins/starter-plugin/changelog/update-lock-file @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated composer.lock diff --git a/projects/plugins/starter-plugin/composer.lock b/projects/plugins/starter-plugin/composer.lock index 2a773f86d3ec8..8f76fd1c0bf1b 100644 --- a/projects/plugins/starter-plugin/composer.lock +++ b/projects/plugins/starter-plugin/composer.lock @@ -1296,6 +1296,7 @@ "reference": "6b8a84b23ab688f32c77c37bf835ef2b9d3ef6b1" }, "require": { + "automattic/jetpack-redirect": "@dev", "php": ">=7.2" }, "require-dev": { diff --git a/projects/plugins/videopress/changelog/update-lock-file b/projects/plugins/videopress/changelog/update-lock-file new file mode 100644 index 0000000000000..b6c4ffc2f7e11 --- /dev/null +++ b/projects/plugins/videopress/changelog/update-lock-file @@ -0,0 +1,4 @@ +Significance: patch +Type: changed + +Updated composer.lock diff --git a/projects/plugins/videopress/composer.lock b/projects/plugins/videopress/composer.lock index 4925b0bdb9b2f..7e143f73219fa 100644 --- a/projects/plugins/videopress/composer.lock +++ b/projects/plugins/videopress/composer.lock @@ -1296,6 +1296,7 @@ "reference": "6b8a84b23ab688f32c77c37bf835ef2b9d3ef6b1" }, "require": { + "automattic/jetpack-redirect": "@dev", "php": ">=7.2" }, "require-dev": {