On Tue, 11 Mar 2025 17:47:53 GMT, Harshitha Onkar <hon...@openjdk.org> wrote:

>> Built-in Profiles are singleton objects and if the user happens to modify 
>> this shared profile object via setData() then the modified version of the 
>> profile is returned each time the same built-in profile is requested via 
>> getInstance().
>> 
>> It is good to protect Built-in profiles from such direct modification by 
>> adding BuiltIn profile check in `setData()` such that **only copies** of 
>> Built-In profiles are allowed to be updated.
>> 
>> With the proposed fix, if Built-In profile is updated using `.setData()` it 
>> throws _**IAE - "BuiltIn profile cannot be modified"**_
>> 
>> There are no restrictions on creating copies of BuiltIn profile and then 
>> modifying it, but what is being restricted with this fix is - the direct 
>> modification of the shared BuiltIn profile instance.
>> 
>> Applications which need a modified version of the ICC Profile should instead 
>> do the following:
>> 
>> 
>> byte[] profileData = ICC_Profile.getData() // get the byte array 
>> representation of BuiltIn- profile
>> ICCProfile newProfile = ICC_Profile.getInstance(profileData) // create a new 
>> profile
>> newProfile.setData() // to modify and customize the profile
>> 
>> 
>> Following existing tests are modified to update a copy of Built-In profile.
>> 
>> - java/awt/color/ICC_Profile/SetHeaderInfo.java
>> - java/awt/color/ICC_ProfileSetNullDataTest.java
>> - sun/java2d/cmm/ProfileOp/SetDataTest.java
>
> Harshitha Onkar has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   review changes

Changes requested by aivanov (Reviewer).

src/java.desktop/share/classes/java/awt/color/ICC_Profile.java line 116:

> 114:      * built-in profiles.
> 115:      */
> 116:     private transient final boolean builtIn;

Suggestion:

    private final transient boolean builtIn;

In [the ‘blessed’ modifier 
order](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/reflect/Modifier.html#toString(int)),
 `transient` follows `final`.

src/java.desktop/share/classes/java/awt/color/ICC_Profile.java line 783:

> 781:      * <p>
> 782:      * Note: {@code ProfileDeferralInfo} is used for only built-in 
> profile
> 783:      * creation and all built-in profiles should be constructed using it.

Should we repeat the note in a comment for the `BuiltInProfile` interface or 
before the values?

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

PR Review: https://git.openjdk.org/jdk/pull/23606#pullrequestreview-2675909868
PR Review Comment: https://git.openjdk.org/jdk/pull/23606#discussion_r1990014882
PR Review Comment: https://git.openjdk.org/jdk/pull/23606#discussion_r1990017050

Reply via email to