The newly added test MTTransformReplacedProfile(yeah that test again) produce
some warning if check:jni is enabled:
WARNING in native method: JNI call made with exception pending
at sun.java2d.cmm.lcms.LCMS.setTagDataNative(java.desktop@17-internal/Native
Method)
at
sun.java2d.cmm.lcms.LCMSProfile.setTag(java.desktop@17-internal/LCMSProfile.java:82)
at sun.java2d.cmm.lcms.LCMS.setTagData(java.desktop@17-internal/LCMS.java:84)
The root cause is in the "errorHandler", which is called by the lcms library
and where we throw a CMSException. So when we get an error code from some lcms
API and try to throw the CMSException it is might be already thrown in the
"errorHandler".
The fix contains two parts:
* If an exception already occurred we skip the creation of the CMSException.
So the first error will be reported to the user.
* If an exception already occurred we DO NOT skip the creation of the
IllegalArgumentException, because it is required by the specification to be
thrown. But we use the initial exception as a "cause" for the new
IllegalArgumentException. Note that it is also possible to just clear an
occurred exception before the creation of the IllegalArgumentException. Any
thoughts about it?
The second part changed the stack trace which will get the user, an example:
old:
java.lang.IllegalArgumentException: Can not write tag data.
at java.desktop/sun.java2d.cmm.lcms.LCMS.setTagDataNative(Native Method)
at
java.desktop/sun.java2d.cmm.lcms.LCMSProfile.setTag(LCMSProfile.java:82)
at java.desktop/sun.java2d.cmm.lcms.LCMS.setTagData(LCMS.java:84)
at
java.desktop/java.awt.color.ICC_Profile.setData(ICC_Profile.java:1132)
at SetDataTest$TestCase.doTest(SetDataTest.java:77)
at SetDataTest.main(SetDataTest.java:140)
new:
java.lang.IllegalArgumentException: Can not write tag data.
at java.desktop/sun.java2d.cmm.lcms.LCMS.setTagDataNative(Native Method)
at
java.desktop/sun.java2d.cmm.lcms.LCMSProfile.setTag(LCMSProfile.java:82)
at java.desktop/sun.java2d.cmm.lcms.LCMS.setTagData(LCMS.java:92)
at
java.desktop/java.awt.color.ICC_Profile.setData(ICC_Profile.java:1114)
at SetDataTest$TestCase.doTest(SetDataTest.java:77)
at SetDataTest.main(SetDataTest.java:140)
Caused by: java.awt.color.CMMException: LCMS error 8: Unknown tag type 'AAAA'
found.
... 6 more
-------------
Commit messages:
- Update LCMS.c
- Update LCMS.c
- Init the cause of the IllegalArgumentException
- 8275344: -Xcheck:jni produces some warnings in the LCMS.c
Changes: https://git.openjdk.java.net/jdk/pull/5975/files
Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=5975&range=00
Issue: https://bugs.openjdk.java.net/browse/JDK-8275344
Stats: 67 lines in 2 files changed: 47 ins; 1 del; 19 mod
Patch: https://git.openjdk.java.net/jdk/pull/5975.diff
Fetch: git fetch https://git.openjdk.java.net/jdk pull/5975/head:pull/5975
PR: https://git.openjdk.java.net/jdk/pull/5975