From 08f3047a80d7543dc03be4aee4dc21fa3c30106f Mon Sep 17 00:00:00 2001 From: zpj80231 Date: Mon, 29 Jun 2026 10:28:05 +0800 Subject: [PATCH] feat: update LicensingFacade --- .../LicensingFacadeTransformer.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/main/java/com/novitechie/LicensingFacadeTransformer.java b/src/main/java/com/novitechie/LicensingFacadeTransformer.java index 5d1408c..6fd1ef2 100644 --- a/src/main/java/com/novitechie/LicensingFacadeTransformer.java +++ b/src/main/java/com/novitechie/LicensingFacadeTransformer.java @@ -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 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;