Skip to content

Commit 795e24b

Browse files
committed
Fix NullPointerException in Fingerprinter
getStacktrace in an exception can be overridden and return null. handle this case gracefully
1 parent cd5b227 commit 795e24b

2 files changed

Lines changed: 21 additions & 5 deletions

File tree

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/exception/Fingerprinter.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,14 @@ public static String fingerprint(Throwable t, ClassNameFilter classNameFiltering
3232
String typeName = clazz.getTypeName();
3333
digest.update(typeName.getBytes());
3434
StackTraceElement[] stackTrace = t.getStackTrace();
35-
for (StackTraceElement stackTraceElement : stackTrace) {
36-
String className = stackTraceElement.getClassName();
37-
if (classNameFiltering.isExcluded(className)) {
38-
continue;
35+
if (stackTrace != null) {
36+
for (StackTraceElement stackTraceElement : stackTrace) {
37+
String className = stackTraceElement.getClassName();
38+
if (classNameFiltering.isExcluded(className)) {
39+
continue;
40+
}
41+
digest.update(stackTraceElement.toString().getBytes());
3942
}
40-
digest.update(stackTraceElement.toString().getBytes());
4143
}
4244
return bytesToHex(digest.digest());
4345
}

dd-java-agent/agent-debugger/src/test/java/com/datadog/debugger/exception/FingerprinterTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,20 @@ void emptyStacktrace() {
6969
Fingerprinter.fingerprint(new EmptyException("test"), classNameFiltering));
7070
}
7171

72+
@Test
73+
void nullStacktrace() {
74+
assertEquals(
75+
"35ae5d9aa4d7179a7d36838ca6266ea459a7cbb6ebc92afc24098bc85cad586",
76+
Fingerprinter.fingerprint(
77+
new RuntimeException("test") {
78+
@Override
79+
public StackTraceElement[] getStackTrace() {
80+
return null;
81+
}
82+
},
83+
classNameFiltering));
84+
}
85+
7286
static class EmptyException extends Exception {
7387
public EmptyException(String message) {
7488
super(message, null, false, false);

0 commit comments

Comments
 (0)