diff --git a/pkg/encoders/event/event.go b/pkg/encoders/event/event.go index 31caf39..04d1d0f 100644 --- a/pkg/encoders/event/event.go +++ b/pkg/encoders/event/event.go @@ -87,6 +87,11 @@ func (ev *E) Free() { // MarshalJSON marshals an event.E into a JSON byte string. // // Call bufpool.PutBytes(b) to return the buffer to the bufpool after use. +// +// WARNING: if json.Marshal is called in the hopes of invoking this function on +// an event, if it has <, > or * in the content or tags they are escaped into +// unicode escapes and break the event ID. Call this function directly in order +// to bypass this issue. func (ev *E) MarshalJSON() (b []byte, err error) { b = bufpool.Get() b = b[:0] diff --git a/pkg/encoders/event/event_test.go b/pkg/encoders/event/event_test.go index ddcedb1..5d2db20 100644 --- a/pkg/encoders/event/event_test.go +++ b/pkg/encoders/event/event_test.go @@ -78,10 +78,11 @@ func TestExamplesCache(t *testing.T) { c = c[:0] c = append(c, b...) ev := New() - if err = ev.UnmarshalJSON(b); chk.E(err) { + if err = json.Unmarshal(b, ev); chk.E(err) { t.Fatal(err) } var b2 []byte + // can't use json.Marshal as it improperly escapes <, > and &. if b2, err = ev.MarshalJSON(); err != nil { t.Fatal(err) }