feat: update LicensingFacade
This commit is contained in:
@@ -42,6 +42,8 @@ public class LicensingFacadeTransformer implements MyTransformer {
|
|||||||
m.instructions.insert(list);
|
m.instructions.insert(list);
|
||||||
} else if ("toJson".equals(m.name) && "()Ljava/lang/String;".equals(m.desc)) {
|
} else if ("toJson".equals(m.name) && "()Ljava/lang/String;".equals(m.desc)) {
|
||||||
insertToJsonFilterSecure(m);
|
insertToJsonFilterSecure(m);
|
||||||
|
} else if ("getInstance".equals(m.name) && "()Lcom/intellij/ui/LicensingFacade;".equals(m.desc)) {
|
||||||
|
insertGetInstanceGuard(m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,6 +56,31 @@ public class LicensingFacadeTransformer implements MyTransformer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void insertGetInstanceGuard(MethodNode m) {
|
||||||
|
if (m.instructions == null || m.instructions.size() == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int storeIdx = m.maxLocals;
|
||||||
|
m.maxLocals += 1;
|
||||||
|
|
||||||
|
ListIterator<AbstractInsnNode> iterator = m.instructions.iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
AbstractInsnNode current = iterator.next();
|
||||||
|
if (current.getOpcode() == ARETURN) {
|
||||||
|
LabelNode returnOriginal = new LabelNode();
|
||||||
|
InsnList patch = new InsnList();
|
||||||
|
patch.add(new VarInsnNode(ASTORE, storeIdx));
|
||||||
|
patch.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false));
|
||||||
|
patch.add(new JumpInsnNode(IFEQ, returnOriginal));
|
||||||
|
patch.add(new InsnNode(ACONST_NULL));
|
||||||
|
patch.add(new InsnNode(ARETURN));
|
||||||
|
patch.add(returnOriginal);
|
||||||
|
patch.add(new VarInsnNode(ALOAD, storeIdx));
|
||||||
|
m.instructions.insertBefore(current, patch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void insertToJsonFilterSecure(MethodNode m) {
|
private void insertToJsonFilterSecure(MethodNode m) {
|
||||||
if (m.instructions == null || m.instructions.size() == 0) {
|
if (m.instructions == null || m.instructions.size() == 0) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user