From 4eede284cc645963620a0b830d18ef2bb64041e1 Mon Sep 17 00:00:00 2001 From: Pierre LALET <pierre.lalet@cea.fr> Date: Tue, 19 Jan 2016 15:32:08 +0100 Subject: [PATCH] Fix .do_dissect() (code easier to read and a bit faster) --- scapy/packet.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/scapy/packet.py b/scapy/packet.py index 04fb3346..56267b22 100644 --- a/scapy/packet.py +++ b/scapy/packet.py @@ -574,12 +574,11 @@ Creates an EPS file describing a packet. If filename is not provided a temporary return s def do_dissect(self, s): - flist = self.fields_desc[:] - flist.reverse() raw = s self.raw_packet_cache_fields = {} - while s and flist: - f = flist.pop() + for f in self.fields_desc: + if not s: + break s, fval = f.getfield(self, s) # We need to track fields with mutable values to discard # .raw_packet_cache when needed. @@ -587,10 +586,7 @@ Creates an EPS file describing a packet. If filename is not provided a temporary self.raw_packet_cache_fields[f.name] = f.do_copy(fval) self.fields[f.name] = fval assert(raw.endswith(s)) - if s: - self.raw_packet_cache = raw[:-len(s)] - else: - self.raw_packet_cache = raw + self.raw_packet_cache = raw[:-len(s)] if s else raw self.explicit = 1 return s -- GitLab