[wp-trac] [WordPress Trac] #64798: REST API: Add dimension validation to sideload endpoint

WordPress Trac noreply at wordpress.org
Thu Mar 5 03:33:20 UTC 2026


#64798: REST API: Add dimension validation to sideload endpoint
-----------------------------+--------------------
 Reporter:  adamsilverstein  |      Owner:  (none)
     Type:  defect (bug)     |     Status:  new
 Priority:  normal           |  Milestone:  7.0
Component:  REST API         |    Version:  trunk
 Severity:  normal           |   Keywords:
  Focuses:                   |
-----------------------------+--------------------
 ## Summary

 Backport for https://github.com/WordPress/wordpress-develop/pull/11100

 Add image dimension validation to the `wp/v2/media/<id>/sideload` REST API
 endpoint to prevent uploading images with dimensions that don't match the
 target image size constraints.

 ## Description

 The REST API sideload endpoint (`wp/v2/media/<id>/sideload`) currently
 accepts uploaded images without validating that their dimensions are
 appropriate for the specified `image_size`. This means a client could
 sideload a 640x480 image as a `thumbnail` (which is registered as
 150x150), producing incorrect metadata and potentially broken layouts.

 This ticket adds a `validate_image_dimensions()` method to
 `WP_REST_Attachments_Controller` that validates uploaded image dimensions
 before processing, with size-specific rules:

 ### Validation rules

 - **`original` size**: Uploaded dimensions must match the original
 attachment dimensions exactly.
 - **`full` and `scaled` sizes**: Only requires positive dimensions (no
 upper bound constraint).
 - **Regular registered sizes** (e.g. `thumbnail`, `medium`, `large`):
 Dimensions must not exceed the registered size maximums, with a 1px
 tolerance for rounding differences.
 - **Unknown sizes**: Returns an error for unregistered image size names.

 ### Implementation details

 - Adds private method `validate_image_dimensions( int $width, int $height,
 string $image_size, int $attachment_id )` to
 `WP_REST_Attachments_Controller`.
 - Moves the `wp_getimagesize()` call earlier in `sideload_item()` so
 dimensions are available for validation before metadata handling.
 - On validation failure, cleans up the uploaded file with
 `wp_delete_file()` before returning the error.
 - Uses `wp_get_registered_image_subsizes()` to look up size constraints
 for registered sizes.

 ### Error codes

 - `rest_upload_invalid_dimensions` — Image has zero or negative
 dimensions.
 - `rest_upload_dimension_mismatch` — Dimensions don't match expected
 constraints for the target size.
 - `rest_upload_unknown_size` — The specified `image_size` is not
 registered.

 All errors return HTTP 400 status.

-- 
Ticket URL: <https://core.trac.wordpress.org/ticket/64798>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list