deathmarine / Luyten

An Open Source Java Decompiler Gui for Procyon
Other
5k stars 999 forks source link

Handle Decompiler Exceptions Gracefully, Procyon Exception #60

Closed samchuc closed 7 years ago

samchuc commented 7 years ago

I'VE GOT THIS ERROR WHEN I PRESS SAVE ALL FOR " WhatsApp-dex2jar.jar "

java.Lang.ArrayIndexOutOfBoundsException: -1

I'm using Whatsapp beta version 2.16.351 with a Windows xp 32 bit & and I tried both "luyten-0.4.9.exe" & "luyten-0.4.8.exe"

Is there anyway to fix it? or to recompile the app without this step .. Thank you.

deathmarine commented 7 years ago

After investigating the problem class is (android/support/v4/content/e.class). Procyon cannot decompile it. I can gracefully handle this exception on my end, and display a dialog to skip the file. I'm not sure if that will help. I'll check and see if Procyon has an issue already. https://bitbucket.org/mstrobel/procyon/issues/311/arrayindexoutofboundsexception-1 As for recompiling the app, unless you know what this dependency is and can re-obfuscate it to match the current scheme, extremely unlikely. I've checked other decompilers and they cannot handle this file either. However with the java tools you can at least get the bytecode.

abstract class android.support.v4.content.e<Params, Progress, Result> {
  private static final java.util.concurrent.ThreadFactory a;
    Signature: Ljava/util/concurrent/ThreadFactory;

  private static final java.util.concurrent.BlockingQueue<java.lang.Runnable> b;

    Signature: Ljava/util/concurrent/BlockingQueue;

  public static final java.util.concurrent.Executor c;
    Signature: Ljava/util/concurrent/Executor;

  private static android.support.v4.content.e$b g;
    Signature: Landroid/support/v4/content/e$b;

  private static volatile java.util.concurrent.Executor h;
    Signature: Ljava/util/concurrent/Executor;

  final android.support.v4.content.e$d<Params, Result> d;
    Signature: Landroid/support/v4/content/e$d;

  final java.util.concurrent.FutureTask<Result> e;
    Signature: Ljava/util/concurrent/FutureTask;

  volatile int f;
    Signature: I

  private final java.util.concurrent.atomic.AtomicBoolean i;
    Signature: Ljava/util/concurrent/atomic/AtomicBoolean;

  static {};
    Signature: ()V
    Code:
       0: new           #7                  // class android/support/v4/content/e$1
       3: dup
       4: invokespecial #46                 // Method android/support/v4/content/e$1."<init>":()V
       7: putstatic     #48                 // Field a:Ljava/util/concurrent/ThreadFactory;
      10: new           #50                 // class java/util/concurrent/LinkedBlockingQueue
      13: dup
      14: bipush        10
      16: invokespecial #53                 // Method java/util/concurrent/LinkedBlockingQueue."<init>":(I)V
      19: putstatic     #55                 // Field b:Ljava/util/concurrent/BlockingQueue;
      22: new           #57                 // class java/util/concurrent/ThreadPoolExecutor
      25: dup
      26: iconst_5
      27: sipush        128
      30: lconst_1
      31: getstatic     #63                 // Field java/util/concurrent/TimeUnit.SECONDS:Ljava/util/concurrent/TimeUnit;
      34: getstatic     #55                 // Field b:Ljava/util/concurrent/BlockingQueue;
      37: getstatic     #48                 // Field a:Ljava/util/concurrent/ThreadFactory;
      40: invokespecial #66                 // Method java/util/concurrent/ThreadPoolExecutor."<init>":(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;)V
      43: astore_0
      44: aload_0
      45: putstatic     #68                 // Field c:Ljava/util/concurrent/Executor;
      48: aload_0
      49: putstatic     #70                 // Field h:Ljava/util/concurrent/Executor;
      52: return

  public android.support.v4.content.e();
    Signature: ()V
    Code:
       0: aload_0
       1: invokespecial #72                 // Method java/lang/Object."<init>":()V
       4: aload_0
       5: getstatic     #74                 // Field android/support/v4/content/e$c.a:I
       8: putfield      #76                 // Field f:I      11: aload_0
      12: new           #78                 // class java/util/concurrent/atomic/AtomicBoolean
      15: dup
      16: invokespecial #79                 // Method java/util/concurrent/atomic/AtomicBoolean."<init>":()V
      19: putfield      #81                 // Field i:Ljava/util/concurrent/atomic/AtomicBoolean;
      22: aload_0
      23: new           #9                  // class android/support/v4/content/e$2
      26: dup
      27: aload_0
      28: invokespecial #84                 // Method android/support/v4/content/e$2."<init>":(Landroid/support/v4/content/e;)V
      31: putfield      #86                 // Field d:Landroid/support/v4/content/e$d;
      34: aload_0
      35: new           #11                 // class android/support/v4/content/e$3
      38: dup
      39: aload_0
      40: aload_0
      41: getfield      #86                 // Field d:Landroid/support/v4/content/e$d;
      44: invokespecial #89                 // Method android/support/v4/content/e$3."<init>":(Landroid/support/v4/content/e;Ljava/util/concurrent/Callable;)V
      47: putfield      #91                 // Field e:Ljava/util/concurrent/FutureTask;
      50: return

  static java.lang.Object a(android.support.v4.content.e, java.lang.Object);
    Signature: (Landroid/support/v4/content/e;Ljava/lang/Object;)Ljava/lang/Object;
    Code:
       0: aload_0
       1: aload_1
       2: invokespecial #95                 // Method c:(Ljava/lang/Object;)Ljava/lang/Object;
       5: areturn

  static java.util.concurrent.atomic.AtomicBoolean a(android.support.v4.content.e);
    Signature: (Landroid/support/v4/content/e;)Ljava/util/concurrent/atomic/AtomicBoolean;
    Code:
       0: aload_0
       1: getfield      #81                 // Field i:Ljava/util/concurrent/atomic/AtomicBoolean;
       4: areturn

  protected static void b();
    Signature: ()V
    Code:
       0: return

  static void b(android.support.v4.content.e, java.lang.Object);
    Signature: (Landroid/support/v4/content/e;Ljava/lang/Object;)V
    Code:
       0: aload_0
       1: getfield      #81                 // Field i:Ljava/util/concurrent/atomic/AtomicBoolean;
       4: invokevirtual #102                // Method java/util/concurrent/atomic/AtomicBoolean.get:()Z
       7: ifne          16
      10: aload_0
      11: aload_1
      12: invokespecial #95                 // Method c:(Ljava/lang/Object;)Ljava/lang/Object;
      15: pop
      16: return

  private static android.os.Handler c();
    Signature: ()Landroid/os/Handler;
    Code:
       0: ldc           #2                  // class android/support/v4/content/e
       2: monitorenter
       3: getstatic     #105                // Field g:Landroid/support/v4/content/e$b;
       6: ifnonnull     19
       9: new           #18                 // class android/support/v4/content/e$b
      12: dup
      13: invokespecial #106                // Method android/support/v4/content/e$b."<init>":()V
      16: putstatic     #105                // Field g:Landroid/support/v4/content/e$b;
      19: getstatic     #105                // Field g:Landroid/support/v4/content/e$b;
      22: astore_0
      23: ldc           #2                  // class android/support/v4/content/e
      25: monitorexit
      26: aload_0
      27: areturn
      28: astore_0
      29: ldc           #2                  // class android/support/v4/content/e
      31: monitorexit
      32: aload_0
      33: athrow
    Exception table:
       from    to  target type
           3    19    28   any
          19    26    28   any
          29    32    28   any

  private Result c(Result);
    Signature: (Ljava/lang/Object;)Ljava/lang/Object;
    Code:
       0: invokestatic  #108                // Method c:()Landroid/os/Handler;
       3: iconst_1
       4: new           #15                 // class android/support/v4/content/e$a
       7: dup
       8: aload_0
       9: iconst_1
      10: anewarray     #5                  // class java/lang/Object
      13: dup
      14: iconst_0
      15: aload_1
      16: aastore
      17: invokespecial #111                // Method android/support/v4/content/e$a."<init>":(Landroid/support/v4/content/e;[Ljava/lang/Object;)V
      20: invokevirtual #117                // Method android/os/Handler.obtainMessage:(ILjava/lang/Object;)Landroid/os/Message;
      23: invokevirtual #122                // Method android/os/Message.sendToTarget:()V
      26: aload_1
      27: areturn

  static void c(android.support.v4.content.e, java.lang.Object);
    Signature: (Landroid/support/v4/content/e;Ljava/lang/Object;)V
    Code:
       0: aload_0
       1: getfield      #91                 // Field e:Ljava/util/concurrent/FutureTask;
       4: invokevirtual #128                // Method java/util/concurrent/FutureTask.isCancelled:()Z
       7: ifeq          23
      10: aload_0
      11: aload_1
      12: invokevirtual #131                // Method b:(Ljava/lang/Object;)V
      15: aload_0
      16: getstatic     #133                // Field android/support/v4/content/e$c.c:I
      19: putfield      #76                 // Field f:I
      22: return
      23: aload_0
      24: aload_1
      25: invokevirtual #135                // Method a:(Ljava/lang/Object;)V
      28: goto          15

  protected abstract Result a();
    Signature: ()Ljava/lang/Object;

  protected void a(Result);
    Signature: (Ljava/lang/Object;)V
    Code:
       0: return

  protected void b(Result);
    Signature: (Ljava/lang/Object;)V
    Code:
       0: return
}