From 32a13797442ccb601b11761d74232773c1402d14 Mon Sep 17 00:00:00 2001 From: Mikhail Kolesnik Date: Tue, 5 Dec 2017 16:04:57 -0800 Subject: [PATCH] Capture and CaptureError not to panic when packet or err is nil Capture methods can handle situations when client is nil, but when packet or err args are nil it will cause calling thread to panic. This is highly undesirable in PROD systems that accidentally try to log a nil packet or error as it might cause a system crash on something not produciton critical as error logging. --- client.go | 9 +++++++++ client_test.go | 21 +++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/client.go b/client.go index 979dfd3..5a3497b 100644 --- a/client.go +++ b/client.go @@ -543,6 +543,11 @@ func (client *Client) Capture(packet *Packet, captureTags map[string]string) (ev return } + if packet == nil { + close(ch) + return + } + if client.shouldExcludeErr(packet.Message) { return } @@ -661,6 +666,10 @@ func (client *Client) CaptureError(err error, tags map[string]string, interfaces return "" } + if err == nil { + return "" + } + if client.shouldExcludeErr(err.Error()) { return "" } diff --git a/client_test.go b/client_test.go index 5f20a8d..7db0698 100644 --- a/client_test.go +++ b/client_test.go @@ -255,3 +255,24 @@ func TestNilClient(t *testing.T) { t.Error("expected nil err:", err) } } + +func TestCaptureNil(t *testing.T) { + var client *Client = DefaultClient + eventID, ch := client.Capture(nil, nil) + if eventID != "" { + t.Error("expected empty eventID:", eventID) + } + // wait on ch: no send should succeed immediately + err := <-ch + if err != nil { + t.Error("expected nil err:", err) + } +} + +func TestCaptureNilError(t *testing.T) { + var client *Client = DefaultClient + eventID := client.CaptureError(nil, nil) + if eventID != "" { + t.Error("expected empty eventID:", eventID) + } +}