From ac5e849a3b291a84dcc2131acdee79503f568b8e Mon Sep 17 00:00:00 2001 From: Louis Date: Fri, 1 Dec 2023 09:40:04 +0100 Subject: [PATCH] decoder: ipfix have max size (#238) --- decoders/netflow/netflow.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/decoders/netflow/netflow.go b/decoders/netflow/netflow.go index e01529f1..8191b632 100644 --- a/decoders/netflow/netflow.go +++ b/decoders/netflow/netflow.go @@ -374,8 +374,10 @@ func DecodeMessageContext(ctx context.Context, payload *bytes.Buffer, templateKe } else { return nil, fmt.Errorf("NetFlow/IPFIX version error: %d", version) } + read := 16 + startSize := payload.Len() - for i := 0; ((i < int(size) && version == 9) || version == 10) && payload.Len() > 0; i++ { + for i := 0; ((i < int(size) && version == 9) || (uint16(read) < size && version == 10)) && payload.Len() > 0; i++ { fsheader := FlowSetHeader{} if err := utils.BinaryDecoder(payload, &fsheader.Id, &fsheader.Length); err != nil { return returnItem, fmt.Errorf("Error decoding FlowSet header: %v", err) @@ -522,6 +524,7 @@ func DecodeMessageContext(ctx context.Context, payload *bytes.Buffer, templateKe } else if version == 10 && flowSet != nil { packetIPFIX.FlowSets = append(packetIPFIX.FlowSets, flowSet) } + read = startSize - payload.Len() + 16 } if version == 9 {