Skip to content

Commit 6ace75e

Browse files
committed
Fix NullPointerException Extracting Class symbols
In rare cases, class super name is null (normally only for java.lag.Object). Handle nicely this case.
1 parent 047fabf commit 6ace75e

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1161,7 +1161,10 @@ private static void addInheritedFields(
11611161
Limits limits,
11621162
List<FieldNode> results,
11631163
int fieldCount) {
1164-
String superClassName = Strings.getClassName(classNode.superName);
1164+
String superClassName =
1165+
classNode.superName != null
1166+
? Strings.getClassName(classNode.superName)
1167+
: Object.class.getTypeName();
11651168
while (!superClassName.equals(Object.class.getTypeName())) {
11661169
Class<?> clazz;
11671170
try {
@@ -1215,7 +1218,10 @@ private static void addInheritedStaticFields(
12151218
Limits limits,
12161219
List<FieldNode> results,
12171220
int fieldCount) {
1218-
String superClassName = Strings.getClassName(classNode.superName);
1221+
String superClassName =
1222+
classNode.superName != null
1223+
? Strings.getClassName(classNode.superName)
1224+
: Object.class.getTypeName();
12191225
while (!superClassName.equals(Object.class.getTypeName())) {
12201226
Class<?> clazz;
12211227
try {

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

Lines changed: 8 additions & 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(extractSuperClass(classNode))
5555
.build();
5656
Scope classScope =
5757
Scope.builder(ScopeType.CLASS, sourceFile, classStartLine, classEndLine)
@@ -72,6 +72,13 @@ private static Scope extractScopes(ClassNode classNode, String jarName) {
7272
}
7373
}
7474

75+
private static String extractSuperClass(ClassNode classNode) {
76+
if (classNode.superName == null) {
77+
return Object.class.getTypeName();
78+
}
79+
return Strings.getClassName(classNode.superName);
80+
}
81+
7582
private static Collection<String> extractInterfaces(ClassNode classNode) {
7683
if (classNode.interfaces.isEmpty()) {
7784
return Collections.emptyList();

0 commit comments

Comments
 (0)