From 1ae5ac7d0bfb0bd94f3d7feb90e0abb8a4973a51 Mon Sep 17 00:00:00 2001 From: Simon Frei Date: Thu, 22 Jul 2021 11:16:24 +0200 Subject: [PATCH] cmd/stcrashreceiver: Sanitize failure report fingerprints (#7840) --- cmd/stcrashreceiver/main.go | 3 ++- cmd/stcrashreceiver/sentry.go | 13 +++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/cmd/stcrashreceiver/main.go b/cmd/stcrashreceiver/main.go index af98cd241..40fc4e775 100644 --- a/cmd/stcrashreceiver/main.go +++ b/cmd/stcrashreceiver/main.go @@ -89,7 +89,8 @@ func handleFailureFn(dsn string) func(w http.ResponseWriter, req *http.Request) pkt.Extra = raven.Extra{ "count": r.Count, } - pkt.Fingerprint = []string{r.Description} + message := sanitizeMessageLDB(r.Description) + pkt.Fingerprint = []string{message} if err := sendReport(dsn, pkt, userIDFor(req)); err != nil { log.Println("Failed to send failure report:", err) diff --git a/cmd/stcrashreceiver/sentry.go b/cmd/stcrashreceiver/sentry.go index 4c2b38bc9..5aa8a7c28 100644 --- a/cmd/stcrashreceiver/sentry.go +++ b/cmd/stcrashreceiver/sentry.go @@ -143,15 +143,20 @@ var ( ldbPathRe = regexp.MustCompile(`(open|write|read) .+[\\/].+[\\/]index[^\\/]+[\\/][^\\/]+: `) ) -func crashReportFingerprint(message string) []string { - // Do not fingerprint on the stack in case of db corruption or fatal - // db io error - where it occurs doesn't matter. - orig := message +func sanitizeMessageLDB(message string) string { message = ldbPosRe.ReplaceAllString(message, "${1}x)") message = ldbFileRe.ReplaceAllString(message, "${1}x${3}") message = ldbChecksumRe.ReplaceAllString(message, "${1}X${3}X") message = ldbInternalKeyRe.ReplaceAllString(message, "${1}x${2}x") message = ldbPathRe.ReplaceAllString(message, "$1 x: ") + return message +} + +func crashReportFingerprint(message string) []string { + // Do not fingerprint on the stack in case of db corruption or fatal + // db io error - where it occurs doesn't matter. + orig := message + message = sanitizeMessageLDB(message) if message != orig { return []string{message} }