RFR: JDK-8347377 : Add validation checks for ICC_Profile header fields [v3]

Harshitha Onkar honkar at openjdk.org
Tue Jan 14 00:24:46 UTC 2025


On Mon, 13 Jan 2025 21:14:31 GMT, Sergey Bylokhov <serb at openjdk.org> wrote:

>>> @mrserb Non-header data are updated using cooked approach (and validated by LCMS) whereas header data are updated using raw LCMS APIs hence require additional validation before setData() is called (On native side it is handled here: setTagDataNative() in [LCMS.c](https://github.com/openjdk/jdk/blob/63eb4853f6782f350f67b6bcf25d83bc4480be71/src/java.desktop/share/native/liblcms/LCMS.c#L445)).
>>> 
>> Then probably we can use approach similar to 8282577: https://github.com/openjdk/jdk/commit/f66070b00d4311c6e3a6fbf38956fa2d5da5fada and try to rely on lcms for validation.
>
>> The ICC spec. defines only these 4 intents, so I don't see a problem here.
> 
> our own profiles do not strictly follow these specification, so if lcms ignores that we can do the same, especially since we fallback to the "Perceptual intent" https://github.com/openjdk/jdk/blob/13a1775718f329b02cdeb82f9d3f7d878ac5e771/src/java.desktop/share/classes/sun/java2d/cmm/lcms/LCMSTransform.java#L75

@mrserb 
> Then probably we can use approach similar to 8282577: https://github.com/openjdk/jdk/commit/f66070b00d4311c6e3a6fbf38956fa2d5da5fada and try to rely on lcms for validation.

The cooked approach doesn't work for ICC_Profile header data. We run into `IAE- cannot write tag data` for both invalid as well as valid header field values. Moreover there are separate LCMS APIs to set header fields `cmsSetHeaderFlags(...), cmsSetDeviceClass(...)`.

Additionally, it is more efficient if  these validation checks are added early on rather than process the data, go all the way to native side - LCMS.c  just to return with IAE in case of invalid header data. 

The cooked approach involves copying over the data to a new profile, writing it to a memory buffer and then loading it back to check for profile correctness. This seems to be a lot of work for header data when simple validation checks in setData() can prevent invalid data.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/23044#discussion_r1913958762


More information about the client-libs-dev mailing list