Fix incorrect handling of some CPX2 constant pool entries by JDIS, contributed by: mdegtyarev@gmail.com, reviewed by: leonid.kuskov@oracle.com
This commit is contained in:
parent
0c8feaab90
commit
a489eeada4
@ -598,6 +598,10 @@ public class ConstantPool {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean refersClassMember() {
|
||||||
|
return tag == TAG.CONSTANT_FIELD || tag == TAG.CONSTANT_METHOD || tag == TAG.CONSTANT_INTERFACEMETHOD;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -------------------------------------------------------- */
|
/* -------------------------------------------------------- */
|
||||||
@ -998,17 +1002,10 @@ public class ConstantPool {
|
|||||||
if (cns == null) {
|
if (cns == null) {
|
||||||
return "#" + cpx;
|
return "#" + cpx;
|
||||||
}
|
}
|
||||||
switch (cns.tag) {
|
if (cns instanceof CPX2) {
|
||||||
case CONSTANT_METHODHANDLE:
|
CPX2 cns2 = (CPX2) cns;
|
||||||
case CONSTANT_DYNAMIC:
|
if (cns2.value1 == cd.this_cpx && cns2.refersClassMember()) {
|
||||||
case CONSTANT_INVOKEDYNAMIC:
|
cpx = cns2.value2;
|
||||||
case CONSTANT_METHOD:
|
|
||||||
case CONSTANT_INTERFACEMETHOD:
|
|
||||||
case CONSTANT_FIELD: {
|
|
||||||
CPX2 cns2 = (CPX2) cns;
|
|
||||||
if (cns2.value1 == cd.this_cpx) {
|
|
||||||
cpx = cns2.value2;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return cns.tag.tagname + " " + StringValue(cpx);
|
return cns.tag.tagname + " " + StringValue(cpx);
|
||||||
|
Loading…
Reference in New Issue
Block a user