feat: update LicensingFacade
This commit is contained in:
@@ -42,6 +42,8 @@ public class LicensingFacadeTransformer implements MyTransformer {
|
||||
m.instructions.insert(list);
|
||||
} else if ("toJson".equals(m.name) && "()Ljava/lang/String;".equals(m.desc)) {
|
||||
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) {
|
||||
if (m.instructions == null || m.instructions.size() == 0) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user