From 994d434f52fcf20bc2e9d55f45e56f1c8c805106 Mon Sep 17 00:00:00 2001 From: Neale Pickett Date: Tue, 24 Jul 2018 20:11:50 +0000 Subject: [PATCH] Fix bug with Stream.Read(0) --- stream.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/stream.go b/stream.go index 12b063b..a8094fb 100644 --- a/stream.go +++ b/stream.go @@ -37,7 +37,6 @@ func NewStream(net, transport gopacket.Flow) Stream { } func (stream *Stream) Reassembled(rs []tcpassembly.Reassembly) { - // XXX: How do we send timestamps? ret := Utterance{ When: rs[0].Seen, } @@ -59,19 +58,26 @@ func (stream *Stream) ReassemblyComplete() { } func (stream *Stream) Read(length int) (Utterance, error) { + // This probably indicates a problem, but we assume you know what you're doing + if length == 0 { + return Utterance{}, nil + } + // Special case: length=-1 means "give me the next utterance" if length == -1 { + var ret Utterance + var err error = nil if stream.pending.Data.Length() > 0 { - ret := stream.pending + ret = stream.pending stream.pending.Data = gapstring.GapString{} - return ret, nil } else { - ret, more := <- stream.conversation + r, more := <- stream.conversation if ! more { - return ret, io.EOF + err = io.EOF } - return ret, nil + ret = r } + return ret, err } // Pull in utterances until we have enough data.