diff --git a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTransformer.java b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTransformer.java index 50d0f6c1b12..b6875100c65 100644 --- a/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTransformer.java +++ b/dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTransformer.java @@ -422,7 +422,7 @@ private byte[] writeClassFile( ClassLoader loader, String classFilePath, ClassNode classNode) { - if (classNode.version < Opcodes.V1_8) { + if ((classNode.version & 0xFF) < Opcodes.V1_8) { // Class file version must be at least 1.8 (52) classNode.version = Opcodes.V1_8; } diff --git a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/CapturedSnapshotTest.java b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/CapturedSnapshotTest.java index e8dc10ab2b7..728ab2820a7 100644 --- a/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/CapturedSnapshotTest.java +++ b/dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/agent/CapturedSnapshotTest.java @@ -66,6 +66,7 @@ import java.lang.reflect.Modifier; import java.net.URISyntaxException; import java.net.URL; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -211,6 +212,24 @@ public void veryOldClassFile() throws Exception { assertOneSnapshot(listener); } + @Test + public void oldClass1_1() throws Exception { + final String CLASS_NAME = "org.apache.commons.lang.BooleanUtils"; // compiled with jdk 1.1 + TestSnapshotListener listener = installSingleProbe(CLASS_NAME, "toBoolean", null); + when(config.isDebuggerVerifyByteCode()).thenReturn(true); + Class testClass = + loadClass( + CLASS_NAME, + Paths.get( + CapturedSnapshotTest.class + .getResource("/classfiles/BooleanUtils.classfile") + .toURI()) + .toString()); + boolean result = Reflect.onClass(testClass).call("toBoolean", Boolean.TRUE).get(); + assertTrue(result); + assertOneSnapshot(listener); + } + @Test public void oldJavacBug() throws Exception { final String CLASS_NAME = "com.datadog.debugger.classfiles.JavacBug"; // compiled with jdk 1.6 diff --git a/dd-java-agent/agent-debugger/src/test/resources/classfiles/BooleanUtils.classfile b/dd-java-agent/agent-debugger/src/test/resources/classfiles/BooleanUtils.classfile new file mode 100644 index 00000000000..170d89ec263 Binary files /dev/null and b/dd-java-agent/agent-debugger/src/test/resources/classfiles/BooleanUtils.classfile differ