diff --git a/util/redactor.go b/util/redactor.go index b4e8e3d4e..13cb49c43 100644 --- a/util/redactor.go +++ b/util/redactor.go @@ -4,6 +4,7 @@ import ( "bytes" "net/url" "os" + "sync" ) var ( @@ -17,11 +18,15 @@ var ( // Redactor implements a redacting io.Writer type Redactor struct { + mu sync.Mutex redact []string } // Redact adds items for redaction func (l *Redactor) Redact(redact ...string) { + l.mu.Lock() + defer l.mu.Unlock() + for _, s := range redact { if RedactHook != nil && len(s) > 0 { l.redact = append(l.redact, RedactHook(s)...) @@ -30,9 +35,11 @@ func (l *Redactor) Redact(redact ...string) { } func (l *Redactor) Write(p []byte) (n int, err error) { + l.mu.Lock() for _, s := range l.redact { p = bytes.ReplaceAll(p, []byte(s), []byte(RedactReplacement)) } + l.mu.Unlock() return os.Stdout.Write(p) }