feat: update LicensingFacade

This commit is contained in:
zpj80231
2026-06-29 10:28:05 +08:00
parent a70b9798c6
commit 08f3047a80
@@ -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;