On Mon, 16 Mar 2026 22:38:52 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.<init>(Unknown Source) at java.awt.image.DataBufferByte.<init>(Unknown Source) at javax.media.jai.LookupTableJAI.<init>(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 ? ------------- PR Comment: https://git.openjdk.org/jdk/pull/29766#issuecomment-4071099555
