Make WordPress Core

Changeset 60641


Ignore:
Timestamp:
08/15/2025 07:09:36 PM (3 months ago)
Author:
adamsilverstein
Message:

Media: ensure wp_get_attachment_image uses valid user-provided width and height.

Fix a bug introduced in WordPress 6.8.2 (r60415) that led to user supplied values for width and height in the $attr array passed to wp_get_attachment_image to be overwritten.

Props rainbowgeek, ocean90, rollybueno, shreya0shrivastava, heybran, mukesh27.
Fixes #63714.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/media.php

    r60477 r60641  
    10921092        $context = apply_filters( 'wp_get_attachment_image_context', 'wp_get_attachment_image' );
    10931093
    1094         $attr           = wp_parse_args( $attr, $default_attr );
    1095         $attr['width']  = $width;
    1096         $attr['height'] = $height;
     1094        $attr = wp_parse_args( $attr, $default_attr );
     1095
     1096        // Ensure that the `$width` doesn't overwrite an already valid user-provided width.
     1097        if ( ! isset( $attr['width'] ) || ! is_numeric( $attr['width'] ) ) {
     1098            $attr['width'] = $width;
     1099        }
     1100
     1101        // Ensure that the `$height` doesn't overwrite an already valid user-provided height.
     1102        if ( ! isset( $attr['height'] ) || ! is_numeric( $attr['height'] ) ) {
     1103            $attr['height'] = $height;
     1104        }
    10971105
    10981106        $loading_optimization_attr = wp_get_loading_optimization_attributes(
  • trunk/tests/phpunit/tests/media.php

    r60477 r60641  
    16331633        $this->assertStringContainsString( 'width="150"', $output, 'Width should not be changed.' );
    16341634        $this->assertStringContainsString( 'height="150"', $output, 'Height should not be changed.' );
     1635    }
     1636
     1637    /**
     1638     * Test that `wp_get_attachment_image` doesn't overwrite an already valid user-provided width and height.
     1639     *
     1640     * @ticket 63714
     1641     */
     1642    public function test_wp_get_attachment_image_not_overwrite_user_provided_width_height() {
     1643        $img = wp_get_attachment_image(
     1644            self::$large_id,
     1645            'large',
     1646            false,
     1647            array(
     1648                'width'  => 999,
     1649                'height' => 999,
     1650            )
     1651        );
     1652
     1653        $this->assertStringContainsString( 'width="999"', $img, 'User-provided width should not be changed.' );
     1654        $this->assertStringContainsString( 'height="999"', $img, 'User-provided height should not be changed.' );
    16351655    }
    16361656
Note: See TracChangeset for help on using the changeset viewer.