Skip to content

Commit

Permalink
fix safeError & safeString for json format (#20)
Browse files Browse the repository at this point in the history
  • Loading branch information
dwiyanr committed Mar 20, 2022
1 parent 71fa7d7 commit 2b8dc2b
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 2 deletions.
4 changes: 2 additions & 2 deletions json_logger.go
Expand Up @@ -68,7 +68,7 @@ func safeString(str fmt.Stringer) (s string) {
if v := reflect.ValueOf(str); v.Kind() == reflect.Ptr && v.IsNil() {
s = "NULL"
} else {
panic(panicVal)
s = fmt.Sprintf("PANIC in String method: %v", panicVal)
}
}
}()
Expand All @@ -82,7 +82,7 @@ func safeError(err error) (s interface{}) {
if v := reflect.ValueOf(err); v.Kind() == reflect.Ptr && v.IsNil() {
s = nil
} else {
panic(panicVal)
s = fmt.Sprintf("PANIC in Error method: %v", panicVal)
}
}
}()
Expand Down
38 changes: 38 additions & 0 deletions json_logger_test.go
Expand Up @@ -60,6 +60,19 @@ func TestJSONLoggerNilStringerKey(t *testing.T) {
}
}

func TestJSONLoggerPanicStringerValue(t *testing.T) {
t.Parallel()

buf := &bytes.Buffer{}
logger := log.NewJSONLogger(buf)
if err := logger.Log("k", unsafeStringer{}); err != nil {
t.Fatal(err)
}
if want, have := `{"k":"PANIC in String method: error"}`+"\n", buf.String(); want != have {
t.Errorf("\nwant %#v\nhave %#v", want, have)
}
}

func TestJSONLoggerNilErrorValue(t *testing.T) {
t.Parallel()

Expand All @@ -73,6 +86,19 @@ func TestJSONLoggerNilErrorValue(t *testing.T) {
}
}

func TestJSONLoggerPanicErrorValue(t *testing.T) {
t.Parallel()

buf := &bytes.Buffer{}
logger := log.NewJSONLogger(buf)
if err := logger.Log("err", unsafeError{}); err != nil {
t.Fatal(err)
}
if want, have := `{"err":"PANIC in Error method: error"}`+"\n", buf.String(); want != have {
t.Errorf("\nwant %#v\nhave %#v", want, have)
}
}

func TestJSONLoggerNoHTMLEscape(t *testing.T) {
t.Parallel()
buf := &bytes.Buffer{}
Expand Down Expand Up @@ -160,6 +186,18 @@ func (s stringError) Error() string {
return string(s)
}

type unsafeStringer struct{}

func (s unsafeStringer) String() string {
panic("error")
}

type unsafeError struct{}

func (s unsafeError) Error() string {
panic("error")
}

func BenchmarkJSONLoggerSimple(b *testing.B) {
benchmarkRunner(b, log.NewJSONLogger(ioutil.Discard), baseMessage)
}
Expand Down

0 comments on commit 2b8dc2b

Please sign in to comment.