From 5c272661e9206ad9da81e4774d2cc496eadb3bb7 Mon Sep 17 00:00:00 2001 From: pbsurf Date: Wed, 4 Nov 2015 20:40:44 +0000 Subject: [PATCH] fix crash on missing payload metadata --- input_file.go | 2 +- output_http.go | 3 +++ protocol.go | 3 +++ raw_socket_listener/tcp_message.go | 5 +++++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/input_file.go b/input_file.go index d044345..16d9765 100644 --- a/input_file.go +++ b/input_file.go @@ -61,7 +61,7 @@ func (i *FileInput) emit() { buf := scanner.Bytes() meta := payloadMeta(buf) - if meta[0][0] == RequestPayload { + if len(meta) > 2 && meta[0][0] == RequestPayload { ts, _ := strconv.ParseInt(string(meta[2]), 10, 64) if lastTime != 0 { diff --git a/output_http.go b/output_http.go index 0da99b1..42970d5 100644 --- a/output_http.go +++ b/output_http.go @@ -184,6 +184,9 @@ func (o *HTTPOutput) Read(data []byte) (int, error) { func (o *HTTPOutput) sendRequest(client *HTTPClient, request []byte) { meta := payloadMeta(request) + if len(meta) < 2 { + return + } uuid := meta[1] body := payloadBody(request) diff --git a/protocol.go b/protocol.go index 1705f58..a4e9eaa 100644 --- a/protocol.go +++ b/protocol.go @@ -67,6 +67,9 @@ func payloadBody(payload []byte) []byte { func payloadMeta(payload []byte) [][]byte { headerSize := bytes.IndexByte(payload, '\n') + if headerSize < 0 { + headerSize = 0; + } return bytes.Split(payload[:headerSize], []byte{' '}) } diff --git a/raw_socket_listener/tcp_message.go b/raw_socket_listener/tcp_message.go index a4dbce1..e003d19 100644 --- a/raw_socket_listener/tcp_message.go +++ b/raw_socket_listener/tcp_message.go @@ -92,6 +92,11 @@ func (t *TCPMessage) IsMultipart() bool { } payload := t.packets[0].Data + + if len(payload) < 4 { + return true + } + m := payload[:4] if t.IsIncoming {