diff --git a/scapy/fields.py b/scapy/fields.py index 34cea528629277a74626e2e666a9cf7c068f25fe..2253cd892e2d89813f90bb50f06475b4771ee6dd 100644 --- a/scapy/fields.py +++ b/scapy/fields.py @@ -1,4 +1,4 @@ -## This file is part of Scapy +# This file is part of Scapy ## See http://www.secdev.org/projects/scapy for more informations ## Copyright (C) Philippe Biondi <phil@secdev.org> ## This program is published under a GPLv2 license @@ -370,7 +370,12 @@ class PacketLenField(PacketField): self.length_from = length_from def getfield(self, pkt, s): l = self.length_from(pkt) - i = self.m2i(pkt, s[:l]) + try: + i = self.m2i(pkt, s[:l]) + except Exception: + if conf.debug_dissector: + raise + i = conf.raw_layer(load=s[:l]) return s[l:],i @@ -415,13 +420,20 @@ class PacketListField(PacketField): if c <= 0: break c -= 1 - p = self.m2i(pkt,remain) - if 'Padding' in p: - pad = p['Padding'] - remain = pad.load - del(pad.underlayer.payload) - else: + try: + p = self.m2i(pkt,remain) + except Exception: + if conf.debug_dissector: + raise + p = conf.raw_layer(load=remain) remain = "" + else: + if 'Padding' in p: + pad = p['Padding'] + remain = pad.load + del(pad.underlayer.payload) + else: + remain = "" lst.append(p) return remain+ret,lst def addfield(self, pkt, s, val):