On Mon, 13 Jan 2025 21:14:31 GMT, Sergey Bylokhov <s...@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

Reply via email to