RFR: JDK-8216558: Lookup.unreflectSetter(Field) fails to throw IllegalAccessException for final fields
Adam Farley8
adam.farley at uk.ibm.com
Thu Feb 14 11:16:56 UTC 2019
Hi Mandy,
Apologies for the delay.
Could you review this cdiff as a proposal for the jtreg test?
Made sense to modify the existing test set for MethodHandle rather than
add a new one.
------------------------------------------------
test/jdk/java/lang/invoke/MethodHandlesGeneralTest.java
*** 830,844 ****
--- 830,860 ----
public void testUnreflectSetter() throws Throwable {
CodeCacheOverflowProcessor.runMHTest(this::testUnreflectSetter0);
}
public void testUnreflectSetter0() throws Throwable {
+ //First we test the newer "static final field" behaviour.
+ testUnreflectSetterStaticFinalField();
+ //Now we test the more proven functionality.
if (CAN_SKIP_WORKING) return;
startTest("unreflectSetter");
testSetter(TEST_UNREFLECT);
}
+ static final int staticFinalField = 0;
+ public void testUnreflectSetterStaticFinalField() throws Throwable {
+ try {
+ Lookup l = MethodHandles.lookup();
+ Field f =
MethodHandlesGeneralTest.class.getDeclaredField("staticFinalField");
+ f.setAccessible(true);
+ MethodHandle s = l.unreflectSetter(f);
+ throw new
RuntimeException("MethodHandle.Lookup.unreflectSetter(Field) failed to
throw IAE when Field is static and final.");
+ } catch (IllegalAccessException e) {
+ // IllegalAccessException expected.
+ }
+ }
+
@Test
public void testFindSetter() throws Throwable {
CodeCacheOverflowProcessor.runMHTest(this::testFindSetter0);
}
------------------------------------------------
Best Regards
Adam Farley
IBM Runtimes
Mandy Chung <mandy.chung at oracle.com> wrote on 31/01/2019 18:58:25:
> From: Mandy Chung <mandy.chung at oracle.com>
> To: Adam Farley8 <adam.farley at uk.ibm.com>
> Cc: core-libs-dev <core-libs-dev at openjdk.java.net>
> Date: 31/01/2019 18:58
> Subject: Re: RFR: JDK-8216558: Lookup.unreflectSetter(Field) fails
> to throw IllegalAccessException for final fields
>
>
>
> On 1/31/19 4:18 AM, Adam Farley8 wrote:
> > Hi Mandy,
> >
> > I've made the changes to the webrev and uploaded the corrected
version.
> >
> > I've also uploaded the zips in the csr and bug.
> >
> > As for the test, I have mentioned that the test is attached to the
bug.
> > I attached the same test to the CSR.
>
> I did look at that but it's not a jtreg regression test. I assume
> you planned to convert it to jtreg test. Anyway, the test attached
> in the bug report is the reproducer of the bug.
>
> It would help the reviewer to include the regression test in
> the webrev along with the fix unless a test is not necessary.
> The OpenJDK developer guide gives a pretty good overview on the
> process [1] and please do ask if you have any question.
>
> https://urldefense.proofpoint.com/v2/url?
> u=http-3A__openjdk.java.net_guide_changePlanning.html-23bug&d=DwIC-
> g&c=jf_iaSHvJObTbx-siA1ZOg&r=P5m8KWUXJf-
>
CeVJc0hDGD9AQ2LkcXDC0PMV9ntVw5Ho&m=uZYDsYv1Pe21YaYk_fuEwKg7Cc5a9sdsiGMPjDqgT5k&s=mvs_zaoLuTOUkmdByobfKcpvovlTEiHtNcz-
> UMc3d70&e=
>
> > Are you saying that the test supplied is not a suitable test?
>
> TestStaticFinal.java is a standalone test. It needs to convert
> to a jtreg regression test.
>
> The regression should throw an exception if Lookup::unreflectSetter
> returns MH on a static final field with and without accessible flag
> set. However TestStaticFinal.java also exits with 0. The regression
> test should pass with your bug and fail without the fix (throwing
> an exception).
>
> This test verifies unreflectSetter on a static final field. I
> suggest it also includes a case with instance final field with
> and without accessible flag set to show the exception for
> unreflectSetter what case allows setting final fields.
>
> Mandy
> [1] https://urldefense.proofpoint.com/v2/url?
> u=http-3A__openjdk.java.net_guide_changePlanning.html-23bug&d=DwIC-
> g&c=jf_iaSHvJObTbx-siA1ZOg&r=P5m8KWUXJf-
>
CeVJc0hDGD9AQ2LkcXDC0PMV9ntVw5Ho&m=uZYDsYv1Pe21YaYk_fuEwKg7Cc5a9sdsiGMPjDqgT5k&s=mvs_zaoLuTOUkmdByobfKcpvovlTEiHtNcz-
> UMc3d70&e=
> P.S. should be updated to refer to CSR that replaced CCC.
>
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number
741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
More information about the core-libs-dev
mailing list