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