From 1f2b24e8343669a6775cfd57a6755c43a09bb420 Mon Sep 17 00:00:00 2001 From: FUJITA Tomonori Date: Sun, 26 Oct 2014 16:35:37 +0900 Subject: [PATCH] packet lib: don't crash with corrupted lldp packet Signed-off-by: FUJITA Tomonori Tested-by: Benjamin Eggerstedt --- ryu/lib/packet/lldp.py | 9 ++++++++- ryu/tests/unit/packet/test_lldp.py | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ryu/lib/packet/lldp.py b/ryu/lib/packet/lldp.py index 12022250..d0cae2fa 100644 --- a/ryu/lib/packet/lldp.py +++ b/ryu/lib/packet/lldp.py @@ -124,7 +124,7 @@ class lldp(packet_base.PacketBase): self.tlvs[-1].tlv_type == LLDP_TLV_END) @classmethod - def parser(cls, buf): + def _parser(cls, buf): tlvs = [] while buf: @@ -144,6 +144,13 @@ class lldp(packet_base.PacketBase): return lldp_pkt, None, buf + @classmethod + def parser(cls, buf): + try: + return cls._parser(buf) + except: + return None, None, buf + def serialize(self, payload, prev): data = bytearray() for tlv in self.tlvs: diff --git a/ryu/tests/unit/packet/test_lldp.py b/ryu/tests/unit/packet/test_lldp.py index 646af1e6..c8daf58c 100644 --- a/ryu/tests/unit/packet/test_lldp.py +++ b/ryu/tests/unit/packet/test_lldp.py @@ -286,6 +286,10 @@ class TestLLDPOptionalTLV(unittest.TestCase): # End eq_(tlvs[16].tlv_type, lldp.LLDP_TLV_END) + def test_parse_corrupted(self): + buf = self.data + pkt = packet.Packet(buf[:128]) + def test_serialize(self): pkt = packet.Packet()