diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2013-06-17 20:58:55 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2013-06-20 06:21:49 +0900 |
commit | df42ae87e887643272e02b9521886972154ebbfc (patch) | |
tree | c5a15f3695df7c9b543c7b8d12a1d1be2acdbb34 | |
parent | 6080f2c0080aadeb9bdcb61e21c150c288ce7bc8 (diff) |
packet lib: avoid exception for bogus protocol header parsing
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/lib/packet/packet.py | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/ryu/lib/packet/packet.py b/ryu/lib/packet/packet.py index d6aeed73..bfeed0d7 100644 --- a/ryu/lib/packet/packet.py +++ b/ryu/lib/packet/packet.py @@ -14,6 +14,7 @@ # limitations under the License. import inspect +import struct from . import packet_base from . import ethernet @@ -47,11 +48,13 @@ class Packet(object): def _parser(self, cls): while cls: - proto, cls = cls.parser(self.data[self.parsed_bytes:]) - if proto: - self.parsed_bytes += proto.length - self.protocols.append(proto) - + try: + proto, cls = cls.parser(self.data[self.parsed_bytes:]) + if proto: + self.parsed_bytes += proto.length + self.protocols.append(proto) + except struct.error: + cls = None if len(self.data) > self.parsed_bytes: self.protocols.append(self.data[self.parsed_bytes:]) |