Projects STRLCPY jadx Commits f02a33ac
🤬
Revision indexing in progress... (symbol navigation in revisions will be accurate after indexed)
  • ■ ■ ■ ■ ■ ■
    jadx-core/src/main/java/jadx/core/dex/nodes/MethodNode.java
    skipped 28 lines
    29 29  import jadx.core.dex.instructions.GotoNode;
    30 30  import jadx.core.dex.instructions.IfNode;
    31 31  import jadx.core.dex.instructions.InsnDecoder;
     32 +import jadx.core.dex.instructions.InsnType;
    32 33  import jadx.core.dex.instructions.SwitchNode;
    33 34  import jadx.core.dex.instructions.args.ArgType;
    34 35  import jadx.core.dex.instructions.args.InsnArg;
    skipped 297 lines
    332 333   InsnNode insn = null;
    333 334   while (offset <= end && offset >= 0) {
    334 335   insn = insnByOffset[offset];
    335  - if (insn != null) {
     336 + if (insn != null && insn.getType() != InsnType.NOP) {
    336 337   if (tryBlockStarted) {
    337 338   catchBlock.addInsn(insn);
    338 339   } else if (insn.canThrowException()) {
    skipped 4 lines
    343 344   }
    344 345   offset = InsnDecoder.getNextInsnOffset(insnByOffset, offset);
    345 346   }
    346  - if (insnByOffset[end] != null) {
    347  - insnByOffset[end].add(AFlag.TRY_LEAVE);
    348  - } else if (insn != null) {
     347 + if (tryBlockStarted && insn != null) {
    349 348   insn.add(AFlag.TRY_LEAVE);
    350 349   }
    351 350   }
    skipped 361 lines
  • ■ ■ ■ ■ ■ ■
    jadx-core/src/test/java/jadx/tests/api/SmaliTest.java
    skipped 30 lines
    31 31   return getClassNodeFromFile(outDex, clsName);
    32 32   }
    33 33   
     34 + /**
     35 + * Preferred method for one file smali test
     36 + */
     37 + protected ClassNode getClassNodeFromSmali() {
     38 + return getClassNodeFromSmaliWithPkg(getTestPkg(), getTestName());
     39 + }
     40 + 
    34 41   protected ClassNode getClassNodeFromSmali(String clsName) {
    35 42   return getClassNodeFromSmali(clsName, clsName);
    36 43   }
    skipped 70 lines
  • ■ ■ ■ ■ ■ ■
    jadx-core/src/test/java/jadx/tests/integration/trycatch/TestTryCatchLastInsn.java
     1 +package jadx.tests.integration.trycatch;
     2 + 
     3 +import org.junit.jupiter.api.Test;
     4 + 
     5 +import jadx.core.dex.nodes.ClassNode;
     6 +import jadx.tests.api.SmaliTest;
     7 + 
     8 +import static jadx.tests.api.utils.JadxMatchers.containsOne;
     9 +import static org.hamcrest.MatcherAssert.assertThat;
     10 + 
     11 +public class TestTryCatchLastInsn extends SmaliTest {
     12 + 
     13 + // @formatter:off
     14 + /*
     15 + public Exception test() {
     16 + ? r1 = "result"; // String
     17 + try {
     18 + r1 = call(); // Exception
     19 + } catch(Exception e) {
     20 + System.out.println(r1); // String
     21 + r1 = e;
     22 + }
     23 + return r1;
     24 + }
     25 + */
     26 + // @formatter:on
     27 + 
     28 + @Test
     29 + public void test() {
     30 + ClassNode cls = getClassNodeFromSmali();
     31 + String code = cls.getCode().toString();
     32 + 
     33 + assertThat(code, containsOne("return call();"));
     34 + }
     35 +}
     36 + 
  • ■ ■ ■ ■ ■ ■
    jadx-core/src/test/smali/trycatch/TestTryCatchLastInsn.smali
     1 +.class public Ltrycatch/TestTryCatchLastInsn;
     2 +.super Ljava/lang/Object;
     3 +.source "TestTryCatchLastInsn.java"
     4 + 
     5 +.method public test()Ljava/lang/Exception;
     6 + .registers 6
     7 + 
     8 + .prologue
     9 + const-string v1, "result"
     10 + 
     11 + :try_start
     12 + invoke-direct {p0}, Ltrycatch/TestTryCatchLastInsn;->call()Ljava/lang/Exception;
     13 + move-result-object v1
     14 + :try_end
     15 + .catch Ljava/lang/Exception; {:try_start .. :try_end} :catch
     16 + 
     17 + :goto_return
     18 + return-object v1
     19 + 
     20 + :catch
     21 + move-exception v4
     22 + sget-object v3, Ljava/lang/System;->out:Ljava/io/PrintStream;
     23 + invoke-virtual {v3, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
     24 + move-object v1, v4
     25 + goto :goto_return
     26 +.end method
     27 + 
     28 + 
     29 +.method private call()Ljava/lang/Exception;
     30 + .registers 2
     31 + new-instance v0, Ljava/lang/Exception;
     32 + invoke-direct {v0}, Ljava/lang/Exception;-><init>()V
     33 + return-object v0
     34 +.end method
     35 + 
Please wait...
Page is in error, reload to recover