Skip to content

Commit 9246b9f

Browse files
authored
Fix NullPointerException Extracting Class symbols (#7934)
In rare cases, class super name is null (normally only for java.lag.Object). Handle nicely this case.
1 parent 8d7866c commit 9246b9f

File tree

3 files changed

+13
-4
lines changed

3 files changed

+13
-4
lines changed

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/instrumentation/ASMHelper.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import static org.objectweb.asm.Type.getObjectType;
66

77
import com.datadog.debugger.agent.Generated;
8+
import datadog.trace.util.Strings;
89
import java.lang.reflect.Field;
910
import java.lang.reflect.Modifier;
1011
import java.util.ArrayList;
@@ -17,6 +18,7 @@
1718
import org.objectweb.asm.signature.SignatureReader;
1819
import org.objectweb.asm.signature.SignatureVisitor;
1920
import org.objectweb.asm.tree.AbstractInsnNode;
21+
import org.objectweb.asm.tree.ClassNode;
2022
import org.objectweb.asm.tree.FieldInsnNode;
2123
import org.objectweb.asm.tree.FieldNode;
2224
import org.objectweb.asm.tree.InsnList;
@@ -331,6 +333,13 @@ private static int widenIntType(int sort) {
331333
return sort;
332334
}
333335

336+
public static String extractSuperClass(ClassNode classNode) {
337+
if (classNode.superName == null) {
338+
return Object.class.getTypeName();
339+
}
340+
return Strings.getClassName(classNode.superName);
341+
}
342+
334343
/** Wraps ASM's {@link org.objectweb.asm.Type} with associated generic types */
335344
public static class Type {
336345
private final org.objectweb.asm.Type mainType;

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/instrumentation/CapturedContextInstrumentor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.datadog.debugger.instrumentation;
22

3+
import static com.datadog.debugger.instrumentation.ASMHelper.extractSuperClass;
34
import static com.datadog.debugger.instrumentation.ASMHelper.getStatic;
45
import static com.datadog.debugger.instrumentation.ASMHelper.invokeConstructor;
56
import static com.datadog.debugger.instrumentation.ASMHelper.invokeStatic;
@@ -37,7 +38,6 @@
3738
import datadog.trace.bootstrap.debugger.MethodLocation;
3839
import datadog.trace.bootstrap.debugger.ProbeId;
3940
import datadog.trace.bootstrap.debugger.util.Redaction;
40-
import datadog.trace.util.Strings;
4141
import java.lang.reflect.Field;
4242
import java.util.ArrayList;
4343
import java.util.Collection;
@@ -1161,7 +1161,7 @@ private static void addInheritedFields(
11611161
Limits limits,
11621162
List<FieldNode> results,
11631163
int fieldCount) {
1164-
String superClassName = Strings.getClassName(classNode.superName);
1164+
String superClassName = extractSuperClass(classNode);
11651165
while (!superClassName.equals(Object.class.getTypeName())) {
11661166
Class<?> clazz;
11671167
try {
@@ -1215,7 +1215,7 @@ private static void addInheritedStaticFields(
12151215
Limits limits,
12161216
List<FieldNode> results,
12171217
int fieldCount) {
1218-
String superClassName = Strings.getClassName(classNode.superName);
1218+
String superClassName = extractSuperClass(classNode);
12191219
while (!superClassName.equals(Object.class.getTypeName())) {
12201220
Class<?> clazz;
12211221
try {

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/symbol/SymbolExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ private static Scope extractScopes(ClassNode classNode, String jarName) {
5151
.addModifiers(extractClassModifiers(classNode.access))
5252
.addInterfaces(extractInterfaces(classNode))
5353
.addAnnotations(extractAnnotations(classNode.visibleAnnotations))
54-
.superClass(Strings.getClassName(classNode.superName))
54+
.superClass(ASMHelper.extractSuperClass(classNode))
5555
.build();
5656
Scope classScope =
5757
Scope.builder(ScopeType.CLASS, sourceFile, classStartLine, classEndLine)

0 commit comments

Comments
 (0)