Bug 535968 - ArrayIndexOutOfBoundsException at aj.org.objectweb.asm.ClassReader.readLabel
Summary: ArrayIndexOutOfBoundsException at aj.org.objectweb.asm.ClassReader.readLabel
Status: CLOSED NOT_ECLIPSE
Alias: None
Product: AspectJ
Classification: Tools
Component: LTWeaving (show other bugs)
Version: 1.8.11   Edit
Hardware: PC Windows 7
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: aspectj inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-06-16 10:31 EDT by Andrey Turbanov CLA
Modified: 2018-06-16 17:58 EDT (History)
0 users

See Also:


Attachments
Class file after transformation (which on ClassReader throws exception) (50.31 KB, application/octet-stream)
2018-06-16 10:31 EDT, Andrey Turbanov CLA
no flags Details
Class file before transormation (45.41 KB, application/octet-stream)
2018-06-16 10:32 EDT, Andrey Turbanov CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Andrey Turbanov CLA 2018-06-16 10:31:11 EDT
Created attachment 274478 [details]
Class file after transformation (which on ClassReader throws exception)

I'm trying to use LTW for aspects in our project, but ArrayIndexOutOfBoundsException in aspectjweaver internals is blocking work.
I added following VM option to app: -javaagent:libs/aspectjweaver.jar
actual version of aspectj - 1.8.13
Oracle JDK 8u172

java.lang.ArrayIndexOutOfBoundsException: 41
	at aj.org.objectweb.asm.ClassReader.readLabel(Unknown Source)
	at aj.org.objectweb.asm.ClassReader.a(Unknown Source)
	at aj.org.objectweb.asm.ClassReader.a(Unknown Source)
	at aj.org.objectweb.asm.ClassReader.b(Unknown Source)
	at aj.org.objectweb.asm.ClassReader.accept(Unknown Source)
	at aj.org.objectweb.asm.ClassReader.accept(Unknown Source)
	at org.aspectj.weaver.bcel.asm.StackMapAdder.addStackMaps(StackMapAdder.java:41)
	at org.aspectj.weaver.bcel.LazyClassGen.getJavaClassBytesIncludingReweavable(LazyClassGen.java:705)
	at org.aspectj.weaver.bcel.BcelWeaver.getClassFilesFor(BcelWeaver.java:1443)
	at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1405)
	at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1183)
	at org.aspectj.weaver.tools.WeavingAdaptor.getWovenBytes(WeavingAdaptor.java:527)
	at org.aspectj.weaver.tools.WeavingAdaptor.weaveClass(WeavingAdaptor.java:363)
	at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:121)
	at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:54)
	at sun.instrument.TransformerManager.transform(TransformerManager.java:188)
	at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
	at java.lang.Class.getDeclaredMethods(Class.java:1975)
	at org.springframework.core.type.StandardAnnotationMetadata.getAnnotatedMethods(StandardAnnotationMetadata.java:152)
	at org.springframework.context.annotation.ConfigurationClassParser.retrieveBeanMethodMetadata(ConfigurationClassParser.java:380)
	at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:314)
	at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:245)
	at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:198)
	at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:167)
	at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:308)
	at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:228)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:270)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:93)
	at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:686)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:524)


At first I thought it was javac https://bugs.openjdk.java.net/browse/JDK-8191969 problem, but it was fixed in JDK 8u172.
I attached 2 class files: raw class file and after transformation.
Comment 1 Andrey Turbanov CLA 2018-06-16 10:32:01 EDT
Created attachment 274479 [details]
Class file before transormation
Comment 2 Andrey Turbanov CLA 2018-06-16 11:54:18 EDT
Looks like problem in getOpenPositionsForInstruments method. If I comment some code in it - all works fine.
Comment 3 Andrey Turbanov CLA 2018-06-16 17:58:25 EDT
Sorry for bother.
It's another javac bug (which not backported to jdk 8) - https://bugs.openjdk.java.net/browse/JDK-8187805