> 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"**_
> 
> Fix consists of:
> * `private boolean isBuiltIn = false` in ICC_Profile which is set to true 
> when BuiltIn profiles are created and false for non-builtIn profile.
> * Converted BuiltInProfile from private interface to private static class 
> (with all the profile instances as static final)
> * `isBuiltIn` flag is set to true when BuiltInProfile are loaded.
> * JavaDoc update for setData() (CSR required)
> 
> 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 represtation 
> 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:

  code annotation

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/23606/files
  - new: https://git.openjdk.org/jdk/pull/23606/files/11bdc2e3..1da22087

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=23606&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=23606&range=01-02

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/23606.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/23606/head:pull/23606

PR: https://git.openjdk.org/jdk/pull/23606

Reply via email to