From eadc110bc82bb9790a9b280a92ffb433856dbc9c Mon Sep 17 00:00:00 2001 From: Malay Date: Fri, 15 May 2026 01:13:22 +0530 Subject: [PATCH] REST API: Guard against missing language_packs in create_item(). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When plugins_api() returns a response without a populated language_packs property — due to a partial response, no translations for installed locales, or a third-party filter — accessing $api->language_packs produces a PHP Warning and array_map() throws a Fatal TypeError on PHP 8.x, causing a spurious HTTP 500 even though the plugin install succeeded. Add an explicit is_array() check before calling array_map() so that the language-pack installation step is safely skipped when the property is absent or is not an array. --- .../class-wp-rest-plugins-controller.php | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php index d0dd5fce4cd9c..6ab6f89ea91eb 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php @@ -380,12 +380,16 @@ public function create_item( $request ) { /** This filter is documented in wp-includes/update.php */ $installed_locales = apply_filters( 'plugins_update_check_locales', $installed_locales ); - $language_packs = array_map( - static function ( $item ) { - return (object) $item; - }, - $api->language_packs - ); + $language_packs = array(); + + if ( ! empty( $api->language_packs ) && is_array( $api->language_packs ) ) { + $language_packs = array_map( + static function ( $item ) { + return (object) $item; + }, + $api->language_packs + ); + } $language_packs = array_filter( $language_packs,