Skip to content

Commit 0e9b927

Browse files
committed
in case StackTraceElement is null use a substitute, fixing issues/1040
Signed-off-by: ceki <ceki@qos.ch>
1 parent f7a0654 commit 0e9b927

2 files changed

Lines changed: 24 additions & 4 deletions

File tree

logback-classic/src/main/java/ch/qos/logback/classic/ClassicConstants.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,13 @@ public class ClassicConstants {
6666
public static final String LOGBACK_CLASSIC_VERSION_MESSAGE = "This is logback-classic version ";
6767
public static final String LOGBACK_VERSIONS_MISMATCH = "Versions of logback-core and logback-classic are different!";
6868

69+
public static final String DECLARING_CLASS_NA = "declaringClassNA";
70+
public static final String METHOD_NAME_NA = "methodNA";
71+
public static final String FILENAME_NA = "fileNA";
72+
public static final int LINE_NUMBER_NA = 1;
73+
74+
75+
public static final String CLASS_NA = "unknownClass";
76+
77+
6978
}

logback-classic/src/main/java/ch/qos/logback/classic/spi/StackTraceElementProxy.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,16 @@
1313
*/
1414
package ch.qos.logback.classic.spi;
1515

16+
import ch.qos.logback.classic.ClassicConstants;
17+
import ch.qos.logback.core.CoreConstants;
18+
1619
import java.io.Serializable;
20+
import java.util.Objects;
21+
22+
import static ch.qos.logback.classic.ClassicConstants.DECLARING_CLASS_NA;
23+
import static ch.qos.logback.classic.ClassicConstants.FILENAME_NA;
24+
import static ch.qos.logback.classic.ClassicConstants.LINE_NUMBER_NA;
25+
import static ch.qos.logback.classic.ClassicConstants.METHOD_NAME_NA;
1726

1827
public class StackTraceElementProxy implements Serializable {
1928

@@ -27,11 +36,13 @@ public class StackTraceElementProxy implements Serializable {
2736
@Deprecated
2837
ClassPackagingData classPackagingData;
2938

39+
// See https://github.com/qos-ch/logback/issues/1040
40+
static final StackTraceElement NA_SUBSTITUTE = new StackTraceElement(DECLARING_CLASS_NA, METHOD_NAME_NA,
41+
FILENAME_NA, LINE_NUMBER_NA);
42+
3043
public StackTraceElementProxy(StackTraceElement ste) {
31-
if (ste == null) {
32-
throw new IllegalArgumentException("ste cannot be null");
33-
}
34-
this.ste = ste;
44+
// while null StackTraceElement is not expected, we defensively replace it with NA_SUBSTITUTE.
45+
this.ste = Objects.requireNonNullElse(ste, NA_SUBSTITUTE);
3546
}
3647

3748
public String getSTEAsString() {

0 commit comments

Comments
 (0)