Re: ArrayIndexOutOfBoundsException
Henry Coles <[email protected]> Tue, 10 Jul 2018 17:07:01 +0100
| Newsgroups | gmane.comp.java.objectweb.asm |
|---|---|
| Message-ID | <CALGd+SSjB=QMirNkgJ+C-Oh8BC863kZnJz1CEvuW8BAy-pqrpg@mail.gmail.com> |
Thanks for the quick response - I'll see if it is fixed with 8u172. Henry On 10 July 2018 at 17:01, Evgeny Mandrikov <[email protected]> wrote: > Hi Henry, > > This looks very similar to https://github.com/jacoco/jacoco/issues/585 > which is actually a bug in javac https://bugs.openjdk. > java.net/browse/JDK-8144185 > fix was done in JDK 9 and backported to JDK 8u172. > This was also discussed in https://gitlab.ow2.org/asm/asm/issues/317789 > that states "Adding workarounds for external bugs in ASM would not be an > incentive to fix the root cause of these bugs" and mentions some possible > workarounds for users of ASM who still want to deal with buggy class files > that were produces by buggy javac versions. > Hope this helps. > > Regards, > Evgeny > > On Tue, Jul 10, 2018 at 5:50 PM Henry Coles <[email protected]> > wrote: > >> I've recently had a bug reported against a project I maintain that looks >> like it might be a bug in ASM (thanks for a great library by the way). >> >> https://github.com/hcoles/pitest/issues/481 >> >> Reading the following class (from this project >> https://github.com/ReedOei/eunomia/blob/master/src/main/ >> java/com/reedoei/eunomia/ast/resolved/ResolvedMethod.java) >> >> public class ResolvedMethod { >> public final List<ResolvedMethodCall> methodCalls = new ArrayList<>(); >> >> public final MethodDeclaration base; >> public final ResolvedMethodDeclaration declaration; >> >> public ResolvedMethod(final MethodDeclaration base) { >> this.base = base; >> >> declaration = base.resolve(); >> >> for (final MethodCallExpr calls : base.findAll(MethodCallExpr.class)) { >> methodCalls.add(new ResolvedMethodCall(calls)); >> } >> >> // Sort by line, then by column. >> methodCalls.sort((a, b) -> >> new NOptionalBuilder<String, Range>(). >> add("a", a.base.getRange()) >> .add("b", b.base.getRange()) >> .build() >> .fromOptional(0, m -> { >> final @Nullable Range aRange = m.get("a"); >> final @Nullable Range bRange = m.get("b"); >> >> if (aRange != null && bRange != null) { >> if (aRange.begin.line < bRange.begin.line || >> (aRange.begin.line == bRange.begin.line && aRange.begin.column < bRange.begin.column)) { >> return -1; >> } else if (aRange.begin.line == bRange.begin.line && >> aRange.begin.column == bRange.begin.column){ >> return 0; >> } else { >> return 1; >> } >> } else { >> return 0; >> } >> })); >> } >> } >> >> Results in >> >> Caused by: java.lang.ArrayIndexOutOfBoundsException: 137 >> at org.pitest.reloc.asm.ClassReader.readLabel (ClassReader.java:2442) >> at org.pitest.reloc.asm.ClassReader.createLabel (ClassReader.java:2458) >> at org.pitest.reloc.asm.ClassReader.readTypeAnnotations (ClassReader.java:2524) >> at org.pitest.reloc.asm.ClassReader.readCode (ClassReader.java:1688) >> at org.pitest.reloc.asm.ClassReader.readMethod (ClassReader.java:1274) >> at org.pitest.reloc.asm.ClassReader.accept (ClassReader.java:679) >> at org.pitest.reloc.asm.ClassReader.accept (ClassReader.java:391) >> >> This is reproducible with both ASM 6.1.1 and 6.2. >> >> The issue seems to relate to the @Nullable annotations. >> >> Is this a known issue? >> >> The code used to read the class is here >> >> https://github.com/hcoles/pitest/blob/3e2e77fb38793f534a1bb93dff7d45 >> c975764a57/pitest/src/main/java/org/pitest/classinfo/ >> ClassInfoVisitor.java#L39 >> >> >> Thanks >> >> Henry >> >> -- >> You receive this message as a subscriber of the [email protected] mailing list. >> To unsubscribe: mailto:[email protected] >> For general help: mailto:[email protected]?subject=help >> OW2 mailing lists service home page: http://www.ow2.org/wws >> > -- You receive this message as a subscriber of the [email protected] mailing list. To unsubscribe: mailto:[email protected] For general help: mailto:[email protected]?subject=help OW2 mailing lists service home page: http://www.ow2.org/wws