Add a check to make themes API query safer (#51081)

* Add check to ensure themes API is safe

* Changelog

* Lint

* Add more checks for malformed data
This commit is contained in:
Ilyas Foo 2024-09-03 13:01:32 +08:00 committed by GitHub
parent 0be7e3deb0
commit 4680b3dcfb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 11 deletions

View File

@ -0,0 +1,4 @@
Significance: patch
Type: fix
Add check to ensure themes API is safe

View File

@ -78,10 +78,10 @@ class OnboardingThemes {
usort(
$themes,
function ( $product_1, $product_2 ) {
if ( ! property_exists( $product_1, 'id' ) || ! property_exists( $product_1, 'slug' ) ) {
if ( ! is_object( $product_1 ) || ! property_exists( $product_1, 'id' ) || ! property_exists( $product_1, 'slug' ) ) {
return 1;
}
if ( ! property_exists( $product_2, 'id' ) || ! property_exists( $product_2, 'slug' ) ) {
if ( ! is_object( $product_2 ) || ! property_exists( $product_2, 'id' ) || ! property_exists( $product_2, 'slug' ) ) {
return 1;
}
if ( in_array( 'Storefront', array( $product_1->slug, $product_2->slug ), true ) ) {
@ -111,10 +111,15 @@ class OnboardingThemes {
if ( ! is_wp_error( $theme_data ) ) {
$theme_data = json_decode( $theme_data['body'] );
if ( $theme_data ) {
$woo_themes = property_exists( $theme_data, 'products' ) ? $theme_data->products : array();
$sorted_themes = self::sort_woocommerce_themes( $woo_themes );
foreach ( $sorted_themes as $theme ) {
if ( ! isset( $theme->slug ) ) {
continue;
}
$slug = sanitize_title_with_dashes( $theme->slug );
$themes[ $slug ] = (array) $theme;
$themes[ $slug ]['is_installed'] = false;
@ -122,6 +127,7 @@ class OnboardingThemes {
$themes[ $slug ]['slug'] = $slug;
}
}
}
$installed_themes = wp_get_themes();
foreach ( $installed_themes as $slug => $theme ) {