Uploaded image for project: 'Harmony'
  1. Harmony
  2. HARMONY-1309

[luni][tests] incorrect test for reflection access control

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • None
    • None
    • Classlib
    • None

    Description

      There is a test[1] in classlib, which verifies that reflection access
      from enclosing class to a private member of a nested class results in
      IllegalAccessException.
      However, this is against the language specification (para 6.6.1 of the JLS3):
      "if the member or constructor is declared private, then access is
      permitted if and only if it occurs within the body of the top level class (7.6)
      that encloses the declaration of the member or constructor."

      Moreover, the following test reveals inconsistency between standard
      access control and reflective one:
      ---------------------------------
      class NestedAccessTest {
      static class A {
      private static int x = 123;
      }
      public static void main(String... s) throws Throwable{
      System.out.println(A.x);
      System.out.println(A.class.getDeclaredField("x").get(null));
      }
      }
      --------------------------------
      >java -showversion NestedAccessTest
      java version "1.5.0_06"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
      Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode)
      123
      Exception in thread "main" java.lang.IllegalAccessException: Class
      NestedAccessTest can not access a member of class NestedAccessTest$A
      with modifiers "private static"
      at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
      at java.lang.reflect.Field.doSecurityCheck(Field.java:954)
      at java.lang.reflect.Field.getFieldAccessor(Field.java:895)
      at java.lang.reflect.Field.get(Field.java:357)
      at NestedAccessTest.main(NestedAccessTest.java:7)
      ----------------------------------

      Besides, this is an acknowledged bug of RI [2], and is ranked TOP#6.

      [1]<testcase classname="tests.api.java.lang.reflect.FieldTest"
      name="test_getLjava_lang_Object"/>
      [2] http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4071957

      Attachments

        1. test-refl-acc.patch
          3 kB
          Alexey Varlamov
        2. test-refl-acc.patch
          3 kB
          Alexey Varlamov

        Issue Links

          Activity

            People

              zakha Alexei Zakharov
              varlax Alexey Varlamov
              Votes:
              1 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: