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:
parent
3cc846c8be
commit
e98d566c59
2 changed files with 73 additions and 6 deletions
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue