From 841aeae949e466501a75260929bdbfe960dbc6ee Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 19 Jun 2020 19:52:10 +0100 Subject: [PATCH 1/2] Allow for alignment padding when parsing sets --- ipfix/message.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ipfix/message.py b/ipfix/message.py index 0af2fad..71c1328 100644 --- a/ipfix/message.py +++ b/ipfix/message.py @@ -398,7 +398,7 @@ def record_iterator(self, offset += _sethdr_st.size # skip set header in decode if setid == template.TEMPLATE_SET_ID or\ setid == template.OPTIONS_SET_ID: - while offset < setend: + while offset + 4 < setend: # allow for padding up to 4 byte alignment (tmpl, offset) = template.decode_template_from( self.mbuf, offset, setid) # FIXME handle withdrawal @@ -431,6 +431,7 @@ def record_iterator(self, # KeyError on template lookup - unknown data set self.unknown_data_set_hook(self, self.mbuf[offset-_sethdr_st.size:setend]) + offset = setend # real end may be greater that accumulated offset def namedict_iterator(self): """ From 6dcc106f22d25ac21b27f8ccb9b82be12e7eb18e Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Fri, 19 Jun 2020 19:53:33 +0100 Subject: [PATCH 2/2] Parse and emit data elements correctly when variable length items included --- ipfix/template.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ipfix/template.py b/ipfix/template.py index 1203e55..26cd8c1 100644 --- a/ipfix/template.py +++ b/ipfix/template.py @@ -187,7 +187,7 @@ def decode_from(self, buf, offset, packplan = None): offset += packplan.st.size # short circuit on no varlen - if not self.varlenslice: + if self.varlenslice is None: return (vals, offset) # direct iteration over remaining IEs @@ -239,7 +239,7 @@ def encode_to(self, buf, offset, vals, packplan = None): offset += packplan.st.size # shortcircuit no varlen - if not self.varlenslice: + if self.varlenslice is None: return offset # direct iteration over remaining IEs