1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-08 05:47:07 +09:00

GO-1943: Fix masking of wrapped errors

This commit is contained in:
Sergey 2023-10-09 15:32:56 +05:00
parent 3cc846c8be
commit e98d566c59
No known key found for this signature in database
GPG key ID: 3B6BEF79160221C6
2 changed files with 73 additions and 6 deletions

View file

@ -2,7 +2,10 @@ package logging
import (
"errors"
"net"
"net/url"
"os"
"strings"
"go.uber.org/zap"
)
@ -70,11 +73,35 @@ func cleanupArgs(args []interface{}) {
}
}
func cleanupError(err error) error {
var pathErr *os.PathError
if errors.As(err, &pathErr) {
pathErr.Path = "<masked file path>"
return pathErr
func cleanUpCase[T error](result string, originalErr error, proc func(T)) string {
var wrappedErr T
if errors.As(originalErr, &wrappedErr) {
prevWrappedString := wrappedErr.Error()
proc(wrappedErr)
result = strings.Replace(result, prevWrappedString, wrappedErr.Error(), 1)
}
return err
return result
}
func cleanupError(err error) error {
if err == nil {
return nil
}
result := err.Error()
result = cleanUpCase(result, err, func(pathErr *os.PathError) {
pathErr.Path = "<masked file path>"
})
result = cleanUpCase(result, err, func(urlErr *url.Error) {
urlErr.URL = "<masked url>"
})
result = cleanUpCase(result, err, func(dnsErr *net.DNSError) {
if dnsErr.Name != "" {
dnsErr.Name = "<masked host name>"
}
if dnsErr.Server != "" {
dnsErr.Server = "<masked dns server>"
}
})
return errors.New(result)
}

View file

@ -2,6 +2,8 @@ package logging
import (
"fmt"
"net"
"net/url"
"os"
"testing"
@ -50,4 +52,42 @@ func TestCleanupArgs(t *testing.T) {
assert.Equal(t, want, got)
})
t.Run("wrapped os.PathError", func(t *testing.T) {
err := &os.PathError{
Op: "open",
Path: "/home/user/secret folder/secret file.txt",
Err: fmt.Errorf("severe error"),
}
in := []interface{}{
123,
fmt.Errorf("wrapped: %w", err),
}
cleanupArgs(in)
got := fmt.Sprintf("trial %d: uploading file: %s", in...)
want := "trial 123: uploading file: wrapped: open <masked file path>: severe error"
assert.Equal(t, want, got)
})
t.Run("nested wrapped errors", func(t *testing.T) {
err := &url.Error{
Op: "get",
URL: "secretaffairs.com/foo/bar",
Err: &net.DNSError{
Name: "secretaffairs.com",
Err: "resolve",
Server: "1.1.1.1",
},
}
in := []interface{}{
fmt.Errorf("wrapped: %w", err),
}
cleanupArgs(in)
got := fmt.Sprintf("error %s", in...)
want := "error wrapped: get \"<masked url>\": lookup <masked host name> on <masked dns server>: resolve"
assert.Equal(t, want, got)
})
}