Отв: JDK 8 incorectly processes nameless parameters in MethodParameters Attribute

Михаил Богданов max.kammerer at yahoo.com
Mon Nov 21 17:12:55 UTC 2016


#9045294 

    пятница, 18 ноября 2016 11:30 dalibor topic <dalibor.topic at oracle.com> писал(а):
 

 Hi Mihail,

could you file an issue at bugs.java.com and let us know which incident 
id you receive, please?

cheers,
dalibor topic

On 14.11.2016 10:58, Михаил Богданов wrote:
> JDK 8 incorrectly processes nameless (name=null) parameters in MethodParameters attribute. Actually problem in inconsistency between Hotspot and reflection:
> Hotspot  VM constructs nameless parameter with empty string name that cause Executable.verifyParameters to throw MalformedParametersException.
> //Code to reproduce:import jdk.internal.org.objectweb.asm.ClassWriter;
> import jdk.internal.org.objectweb.asm.MethodVisitor;
> import jdk.internal.org.objectweb.asm.Opcodes;
>
> import java.lang.reflect.Method;
> import java.net.URL;
> import java.net.URLClassLoader;
>
> public class Bug {
>
>    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {
>        ClassWriter writer = new ClassWriter(Opcodes.ASM5);
>        writer.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC | Opcodes.ACC_INTERFACE | Opcodes.ACC_ABSTRACT, "Test", null, "java/lang/Object", null);
>        MethodVisitor test = writer.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_ABSTRACT, "test", "(I)V", null, null);
>        test.visitParameter(null, 0);
>        test.visitEnd();
>
>        writer.visitEnd();
>        final byte[] bytes = writer.toByteArray();
>
>        URLClassLoader urlClassLoader = new URLClassLoader(new URL[0], ClassLoader.getSystemClassLoader()) {
>            @Override
>            protected Class<?> findClass(String name) throws ClassNotFoundException {
>                if (name.equals("Test")) {
>                    return defineClass("Test", bytes, 0, bytes.length);
>                }
>                return super.findClass(name);
>            }
>        };
>
>
>        Class<?> clazz = urlClassLoader.loadClass("Test");
>        Method method = clazz.getDeclaredMethod("test", Integer.TYPE);
> //        Exception in thread "main" java.lang.reflect.MalformedParametersException: Invalid parameter name ""
> //        at java.lang.reflect.Executable.verifyParameters(Executable.java:386)
> //        at java.lang.reflect.Executable.privateGetParameters(Executable.java:416)
> //        at java.lang.reflect.Executable.getParameters(Executable.java:357)
> //        at Bug.main(Bug.java:37)
>        method.getParameters();
>    }
> }
> Best regards,  Max
>

-- 
<http://www.oracle.com> Dalibor Topic | Principal Product Manager
Phone: +494089091214 <tel:+494089091214> | Mobile: +491737185961
<tel:+491737185961>

ORACLE Deutschland B.V. & Co. KG | Kühnehöfe 5 | 22761 Hamburg

ORACLE Deutschland B.V. & Co. KG
Hauptverwaltung: Riesstr. 25, D-80992 München
Registergericht: Amtsgericht München, HRA 95603

Komplementärin: ORACLE Deutschland Verwaltung B.V.
Hertogswetering 163/167, 3543 AS Utrecht, Niederlande
Handelsregister der Handelskammer Midden-Niederlande, Nr. 30143697
Geschäftsführer: Alexander van der Ven, Jan Schultheiss, Val Maher

<http://www.oracle.com/commitment> Oracle is committed to developing
practices and products that help protect the environment

   


More information about the jdk8-dev mailing list