Menu

#753 inner class with generic in constructor parameter causes crash

v6.1
closed-fixed
None
Medium
2019-12-05
2019-05-22
brunocarle
No

Hello,
proguard 6.1.0 crashes for me when processing inner class with generic in constructor parameter
I dont know if the fact that it is an inner class is relevant or not.

our code:

public class PlanningHistory {
...
    public class History {
    ...
            public History(int trafficLightId, Date date, int noOfUnplannedOrders, double kms, double costs, String info, List<PlanningRoute> routes) {
        ...

Removing the generic from the constructor parameters prevents the crash, i.e.:

    public History(int trafficLightId, Date date, int noOfUnplannedOrders, double kms, double costs, String info, List routes) {

stack trace

Shrinking...
java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
at proguard.shrink.ClassShrinker$MySignatureCleaner.visitSignatureAttribute(ClassShrinker.java:345)
at proguard.classfile.util.SimplifiedVisitor.visitSignatureAttribute(SimplifiedVisitor.java:504)
at proguard.classfile.util.SimplifiedVisitor.visitSignatureAttribute(SimplifiedVisitor.java:516)
at proguard.classfile.attribute.SignatureAttribute.accept(SignatureAttribute.java:109)
at proguard.classfile.ProgramMethod.attributesAccept(ProgramMethod.java:101)
at proguard.classfile.attribute.visitor.AllAttributeVisitor.visitProgramMember(AllAttributeVisitor.java:95)
at proguard.classfile.util.SimplifiedVisitor.visitProgramMethod(SimplifiedVisitor.java:93)
at proguard.classfile.ProgramMethod.accept(ProgramMethod.java:93)
at proguard.classfile.ProgramClass.methodsAccept(ProgramClass.java:588)
at proguard.shrink.ClassShrinker.visitProgramClass(ClassShrinker.java:133)
at proguard.classfile.visitor.MultiClassVisitor.visitProgramClass(MultiClassVisitor.java:67)
at proguard.shrink.UsedClassFilter.visitProgramClass(UsedClassFilter.java:62)
at proguard.classfile.ProgramClass.accept(ProgramClass.java:430)
at proguard.classfile.ClassPool.classesAccept(ClassPool.java:125)
at proguard.shrink.Shrinker.execute(Shrinker.java:158)
at proguard.ProGuard.shrink(ProGuard.java:392)
at proguard.ProGuard.execute(ProGuard.java:178)
at proguard.ProGuard.main(ProGuard.java:591)
[ERROR] Command execution failed.

using openjdk version "11.0.1" 2018-10-16

Discussion

  • Eric Lafortune

    Eric Lafortune - 2019-05-27

    Thanks for your report. I can't reproduce the issue yet. It seems to be related to ProGuard optimizing the code and removing unused parameters in the constructor. Could you provide (post or mail) a small project that allows us to reproduce and then fix the issue?

     
  • Eric Lafortune

    Eric Lafortune - 2019-05-27
    • status: open --> open-cant-reproduce
    • assigned_to: Eric Lafortune
     
  • Eric Lafortune

    Eric Lafortune - 2019-05-27
    • Group: v6.0 --> v6.1
     
  • T. Neidhart

    T. Neidhart - 2019-08-16

    Or you possibly using gson and the related classes PlanningHistory and History are used when serializing / deserializing with gson?

    Could you try if disabling gson optimization makes a difference:

    -optimizations !library/gson

     
  • T. Neidhart

    T. Neidhart - 2019-08-16
     
  • T. Neidhart

    T. Neidhart - 2019-08-17

    We managed now to reproduce this case and it looks like its related to the optimization method/removal/parameter .

    We will fix it asap.

     
  • T. Neidhart

    T. Neidhart - 2019-08-17

    Problem has been identified and fixed in source code. It was related to an incomplete fix for PGD-735. We will try to make a release 6.1.2 asap.

     
  • T. Neidhart

    T. Neidhart - 2019-12-05
    • status: open-cant-reproduce --> closed-fixed
     
  • T. Neidhart

    T. Neidhart - 2019-12-05

    This problem should be fixed in release 6.2.0.

     

Log in to post a comment.