On Fri, 20 Mar 2026 22:42:34 GMT, Phil Race <[email protected]> wrote:

>> This fix updates DataBuffer subclasses to actually adhere to their stated 
>> specifications by rejecting certain invalid parameters for constructors and 
>> getters and setters.
>> A new egression test for each of the constructor and getter/setter cases is 
>> supplied.
>> 
>> No existing regression tests fail with this change, and standard demos work.
>> 
>> Problems caused by these changes are most likely to occur if the client has 
>> a bug such that 
>> - a client uses the constructors that accept an array and then supplies a 
>> "size" that is greater than the array.
>> - a client uses the constructors that accept an array and then supplies a 
>> "size" that is less than the array and then uses getter/setters that are 
>> within the array but outside the range specified by size. 
>> 
>> Since very few clients (and just one case in the JDK that I found) even use 
>> these array constructors the changes are unlikely to make a difference to 
>> clients.
>> 
>> The CSR is ready for review https://bugs.openjdk.org/browse/JDK-8378116
>
> Phil Race has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   8377568

> I've updated for all comments to date. I am going to propose a significant 
> change (need first to implement and test) to make negative offsets illegal. 
> Briefly, the reason for this is that I've looked into 
> https://bugs.openjdk.org/browse/JDK-4308987 It was a bug reported against JAI
> 
> "I am using JAI 1.0.2 "
> 
> Exception in thread "main" java.lang.ExceptionInInitializerError: 
> java.lang.IllegalArgumentException: Data offset(s) must be positive 
> integer(s) at java.awt.image.DataBuffer.(Unknown Source) at 
> java.awt.image.DataBufferByte.(Unknown Source) at 
> javax.media.jai.LookupTableJAI.(LookupTableJAI.java:115)
> 
> I've managed to locate the source for JAI 1.0.2 and the relevant code looks 
> like this public LookupTableJAI(byte[] data, int offset) { this.data = new 
> DataBufferByte(data, data.length, -offset); }
> 
> And that's why negative was needed. Quite odd to my mind, whereas in JAI 
> 1.1.2 it looks like this public LookupTableJAI(byte[] data, int offset) { 
> this.initOffsets(1, offset); this.data = new DataBufferByte(data, 
> data.length); }
> 
> So I don't think we need to worry any more about breaking JAI. And some of 
> the difficult to explain and problematic to implement cases go away.
> 
> Thoughts ?

This looks fine and its better to avoid negative offsets.

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

PR Comment: https://git.openjdk.org/jdk/pull/29766#issuecomment-4107904582

Reply via email to