1 /*
   2  * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25  // This is the Java representation of the below jasm code.  The test tries
  26  // to create a sub-type of jdk.internal.reflect.MethodAccessorImpl in order
  27  // to bypass Reflection.getCallerClass.  That should fail with an IAE.
  28  //
  29  import java.lang.reflect.Module;
  30  class fakeMethodAccessor extends jdk.internal.reflect.MethodAccessorImpl {
  31      public static void main(String[] a) throws Exception {
  32         fakeMethodAccessor f = new fakeMethodAccessor();
  33         System.out.println(String.class.getModule()
  34            .isExported("jdk.internal.misc", fakeMethodAccessor.class.getModule()));
  35      }
  36  }
  37 */
  38 
  39 super class fakeMethodAccessor
  40     extends jdk/internal/reflect/MethodAccessorImpl
  41     version 53:0
  42 {
  43 
  44 
  45 Method "<init>":"()V"
  46     stack 1 locals 1
  47 {
  48         aload_0;
  49         invokespecial    Method jdk/internal/reflect/MethodAccessorImpl."<init>":"()V";
  50         return;
  51 }
  52 
  53 public static Method main:"([Ljava/lang/String;)V"
  54     throws java/lang/Exception
  55     stack 4 locals 2
  56 {
  57         new    class FakeMethodAccessor;
  58         dup;
  59         invokespecial    Method "<init>":"()V";
  60         astore_1;
  61         getstatic    Field java/lang/System.out:"Ljava/io/PrintStream;";
  62         ldc    class java/lang/String;
  63         invokevirtual    Method java/lang/Class.getModule:"()Ljava/lang/reflect/Module;";
  64         ldc    String "jdk.internal.misc";
  65         ldc    class FakeMethodAccessor;
  66         invokevirtual    Method java/lang/Class.getModule:"()Ljava/lang/reflect/Module;";
  67         invokevirtual    Method java/lang/reflect/Module.isExported:"(Ljava/lang/String;Ljava/lang/reflect/Module;)Z";
  68         invokevirtual    Method java/io/PrintStream.println:"(Z)V";
  69         return;
  70 }
  71 
  72 } // end Class FakeMethodAccessor