From: catsalty <23442547+catsalty@users.noreply.github.com> Date: Thu, 25 Jul 2024 11:16:23 +0000 (+0800) Subject: [bugfix]fix TransformCallToStatic with invokeinterface or invokedynamic X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=6722b966e685afb225b7372e771672d1d392c333;p=javassist.git [bugfix]fix TransformCallToStatic with invokeinterface or invokedynamic Replacing invokeinterface or invokedynamic with invokestatic will result in a missing instruction. This solution can fix the problem. Reference document: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokestatic https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokedynamic https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokeinterface --- diff --git a/src/main/javassist/convert/TransformCallToStatic.java b/src/main/javassist/convert/TransformCallToStatic.java index 6f1dfef3..a7b435d7 100644 --- a/src/main/javassist/convert/TransformCallToStatic.java +++ b/src/main/javassist/convert/TransformCallToStatic.java @@ -23,6 +23,9 @@ public class TransformCallToStatic extends TransformCall { } iterator.writeByte(Opcode.INVOKESTATIC, pos); iterator.write16bit(newIndex, pos + 1); + if (c == Opcode.INVOKEINTERFACE || c == Opcode.INVOKEDYNAMIC) { + iterator.writeByte(0, pos + 3); + } return pos; } }