On Tue, 14 Oct 2025 17:43:56 GMT, Phil Race <[email protected]> wrote:

>> src/java.desktop/share/classes/java/awt/image/Raster.java line 310:
>> 
>>> 308:             throw new IllegalArgumentException("size too large to 
>>> store image");
>>> 309:         }
>>> 310:         int size = (int)lsz;
>> 
>> Isn't it strange that in this method we reject "empty" images by requiring w 
>> and h to be greater than 0, but at the same time accept 0 as scanlineStride 
>> and pixelStride? This may result in empty image as well (size == 0), I think 
>> it will be rejected later but still should we check it here as well?
>
> We seem to have a number of APIs that allow the strides to be zero.
> I find them odd, but I don't see how they can cause an empty image and they 
> need careful consideration before changing. It seems very deliberate.
> Here's a sampling of other cases (there are likely more, I searched very 
> briefly and crudely)
> 
> 
>      * @throws IllegalArgumentException if {@code scanlineStride} is less 
> than 0
>     public BandedSampleModel(int dataType,
>                              int w, int h,
>                              int scanlineStride,
>                              int[] bankIndices,
>                              int[] bandOffsets) 
> 
> =====
> 
>      * @throws IllegalArgumentException if {@code pixelStride} is less than 0
>      * @throws IllegalArgumentException if {@code scanlineStride} is less 
> than 0
>   public ComponentSampleModel(int dataType,
>                                 int w, int h,
>                                 int pixelStride,
>                                 int scanlineStride,
>                                 int[] bandOffsets) {
> 
> =====
>      * @throws IllegalArgumentException if {@code pixelStride} is less than 0
>      * @throws IllegalArgumentException if {@code scanlineStride} is less 
> than 0
>    public ComponentSampleModel(int dataType,
>                                 int w, int h,
>                                 int pixelStride,
>                                 int scanlineStride,
>                                 int[] bankIndices,
>                                 int[] bandOffsets) {

PS, also negative strides are something that we've been asked to support too - 
in the distant past.
But I don't have any plans to do it now.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/27627#discussion_r2429982980

Reply via email to