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

NOTE : For existing tests only necessary updates are done.

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

Commit messages:
 - updated existing tests
 - BuiltInProfileCheck test added
 - src code fix

Changes: https://git.openjdk.org/jdk/pull/23606/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=23606&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8346465
  Stats: 157 lines in 5 files changed: 122 ins; 10 del; 25 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