Fix NPE when decompiling constructor #654

This commit is contained in:
Maxim Degtyarev
2018-04-27 15:01:55 +03:00
committed by Egor Ushakov
parent 7c8e64da81
commit a74a9d7d25
8 changed files with 212 additions and 4 deletions

View File

@@ -0,0 +1,50 @@
package pkg;
public class TestMissingConstructorCallBad {
private TestMissingConstructorCallBad() {
System.out.println("Nobody will see what we do here!");// 14 15 16
this((Object)null);// 19 20
}// 21
public static void main(String... var0) {
try {
new TestMissingConstructorCallBad();
} catch (Throwable var2) {// 37
;
}
}// 39
}
class 'pkg/TestMissingConstructorCallBad' {
method '<init> ()V' {
0 4
3 4
5 4
9 5
a 5
d 6
}
method 'main ([Ljava/lang/String;)V' {
b 11
c 15
}
}
Lines mapping:
14 <-> 5
15 <-> 5
16 <-> 5
19 <-> 6
20 <-> 6
21 <-> 7
37 <-> 12
39 <-> 16
Not mapped:
18
28
29
30
31
33

View File

@@ -0,0 +1,60 @@
package pkg;
public class TestMissingConstructorCallGood {
private TestMissingConstructorCallGood(Object var1) {
}// 16
private TestMissingConstructorCallGood() {
System.out.println("Nobody will see what we do here!");// 22 23 24
this((Object)null);// 27 28
}// 29
public static void main(String... var0) {
try {
new TestMissingConstructorCallGood();
} catch (Throwable var2) {// 45
;
}
}// 47
}
class 'pkg/TestMissingConstructorCallGood' {
method '<init> (Ljava/lang/Object;)V' {
4 4
}
method '<init> ()V' {
0 7
3 7
5 7
9 8
a 8
d 9
}
method 'main ([Ljava/lang/String;)V' {
b 14
c 18
}
}
Lines mapping:
16 <-> 5
22 <-> 8
23 <-> 8
24 <-> 8
27 <-> 9
28 <-> 9
29 <-> 10
45 <-> 15
47 <-> 19
Not mapped:
14
15
26
36
37
38
39
41

View File

@@ -0,0 +1,42 @@
/**
* This code can be assembled with <a href="https://wiki.openjdk.java.net/display/CodeTools/asmtools">asmtools</a>
* using <code>asmtools jasm -g *.jasm</code> command line.
*/
package pkg;
super public class TestMissingConstructorCallBad
version 52:0
{
private Method "<init>":"()V"
stack 2 locals 1
{
getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
ldc String "Nobody will see what we do here!";
invokevirtual Method java/io/PrintStream.println:"(Ljava/lang/String;)V";
aload_0;
aconst_null;
invokespecial Method "<init>":"(Ljava/lang/Object;)V";
return;
}
public static varargs Method main:"([Ljava/lang/String;)V"
stack 2 locals 2
{
try t0;
new class TestMissingConstructorCallBad;
dup;
invokespecial Method "<init>":"()V";
pop;
endtry t0;
goto L12;
catch t0 java/lang/Throwable;
stack_frame_type stack1;
stack_map class java/lang/Throwable;
astore_1;
L12: stack_frame_type same;
return;
}
} // end Class TestMissingConstructorCallBad

View File

@@ -0,0 +1,50 @@
/**
* This code can be assembled with <a href="https://wiki.openjdk.java.net/display/CodeTools/asmtools">asmtools</a>
* using <code>asmtools jasm -g *.jasm</code> command line.
*/
package pkg;
super public class TestMissingConstructorCallGood
version 52:0
{
private Method "<init>":"(Ljava/lang/Object;)V"
stack 1 locals 2
{
aload_0;
invokespecial Method java/lang/Object."<init>":"()V";
return;
}
private Method "<init>":"()V"
stack 2 locals 1
{
getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
ldc String "Nobody will see what we do here!";
invokevirtual Method java/io/PrintStream.println:"(Ljava/lang/String;)V";
aload_0;
aconst_null;
invokespecial Method "<init>":"(Ljava/lang/Object;)V";
return;
}
public static varargs Method main:"([Ljava/lang/String;)V"
stack 2 locals 2
{
try t0;
new class TestMissingConstructorCallGood;
dup;
invokespecial Method "<init>":"()V";
pop;
endtry t0;
goto L12;
catch t0 java/lang/Throwable;
stack_frame_type stack1;
stack_map class java/lang/Throwable;
astore_1;
L12: stack_frame_type same;
return;
}
} // end Class TestMissingConstructorCallGood