diff --git a/dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/parsers/HotspotCrashLogParser.java b/dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/parsers/HotspotCrashLogParser.java index f5b7fe722e0..120c42d8842 100644 --- a/dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/parsers/HotspotCrashLogParser.java +++ b/dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/parsers/HotspotCrashLogParser.java @@ -454,8 +454,7 @@ public CrashLog parse(String uuid, String crashLog) { final Matcher m = REGISTER_TO_MEMORY_MAPPING_PARSER.matcher(line); if (m.lookingAt()) { currentRegisterToMemoryMapping = m.group(1); - registerToMemoryMapping.put( - currentRegisterToMemoryMapping, line.substring(line.indexOf('=') + 1)); + registerToMemoryMapping.put(currentRegisterToMemoryMapping, line.substring(m.end())); } else if (!currentRegisterToMemoryMapping.isEmpty()) { registerToMemoryMapping.computeIfPresent( currentRegisterToMemoryMapping, (key, value) -> value + "\n" + line); diff --git a/dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/parsers/RedactUtils.java b/dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/parsers/RedactUtils.java index 3e18fd2befb..eb41cde2df8 100644 --- a/dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/parsers/RedactUtils.java +++ b/dd-java-agent/agent-crashtracking/src/main/java/datadog/crashtracking/parsers/RedactUtils.java @@ -50,7 +50,7 @@ public final class RedactUtils { // "Compiled method (c2) ... com.company.Foo::methodName (N bytes)" (PRODUCT — dots) // "Compiled method (c2) ... com/company/Foo::methodName (N bytes)" (debug — slashes) private static final Pattern NMETHOD_CLASS = - Pattern.compile("([A-Za-z][A-Za-z0-9$]*(?:[./][A-Za-z][A-Za-z0-9$]*)+)::"); + Pattern.compile("([A-Za-z$_][A-Za-z0-9$_]*(?:[./][A-Za-z$_][A-Za-z0-9$_]*)+)::"); // Library path in two formats produced by os::print_location(): // in /path/to/lib.so at 0x... (no dladdr symbol) @@ -62,11 +62,11 @@ public final class RedactUtils { // This specifically identifies the inline string value of a java.lang.Class 'name' field private static final Pattern DOTTED_CLASS_OOP_REF = Pattern.compile( - "\"([A-Za-z][A-Za-z0-9$]*(?:\\.[A-Za-z][A-Za-z0-9$]*)*)\"(\\{0x[0-9a-fA-F]+\\})"); + "\"([A-Za-z$_][A-Za-z0-9$_]*(?:\\.[A-Za-z$_][A-Za-z0-9$_]*)*)\"(\\{0x[0-9a-fA-F]+\\})"); // is an oop: com.company.Class private static final Pattern IS_AN_OOP = - Pattern.compile("(is an oop: )([A-Za-z][A-Za-z0-9$]*(?:\\.[A-Za-z][A-Za-z0-9$]*)*)"); + Pattern.compile("(is an oop: )([A-Za-z$_][A-Za-z0-9$_]*(?:\\.[A-Za-z$_][A-Za-z0-9$_]*)*)"); // Hex-dump bytes in "points into unknown readable memory:" lines. // Two formats produced by os::print_location(): @@ -215,6 +215,7 @@ static String redactNmethodClass(String line) { * java.lang.Class} oop) use {@link #redactRegisterToMemoryMapping} which detects the oop type * automatically. */ + // @VisibleForTesting — no production callers; used directly in unit tests static String redactDottedClassOopRef(String line) { return redactStringOopRef(line, false); } diff --git a/dd-trace-api/src/main/java/datadog/trace/api/config/CrashTrackingConfig.java b/dd-trace-api/src/main/java/datadog/trace/api/config/CrashTrackingConfig.java index 7e2b3fe6ee4..c605f177c46 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/config/CrashTrackingConfig.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/config/CrashTrackingConfig.java @@ -7,6 +7,8 @@ * documentation for details. */ public final class CrashTrackingConfig { + private CrashTrackingConfig() {} + public static final String CRASH_TRACKING_ENABLED = "crashtracking.enabled"; public static final boolean CRASH_TRACKING_ENABLED_DEFAULT = true;