diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-11-30 22:15:22 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-11-30 22:15:22 +0900 |
commit | b00969a31712e4346cd0ac9f1b90f36512836c93 (patch) | |
tree | 12b683c34445f7428a33b3c3e15466ea4be369d8 | |
parent | df42ea0dc0eaa4e237e30f5d9409a711f843ecc2 (diff) |
packet lib: don't crash with bogus ospf packet
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/lib/packet/ospf.py | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/ryu/lib/packet/ospf.py b/ryu/lib/packet/ospf.py index 5f49402b..a776b94d 100644 --- a/ryu/lib/packet/ospf.py +++ b/ryu/lib/packet/ospf.py @@ -612,7 +612,7 @@ class OSPFMessage(packet_base.PacketBase, _TypeDisp): self.authentication = authentication @classmethod - def parser(cls, buf): + def _parser(cls, buf): if len(buf) < cls._HDR_LEN: raise stream_parser.StreamParser.TooSmallException( '%d < %d' % (len(buf), cls._HDR_LEN)) @@ -637,6 +637,13 @@ class OSPFMessage(packet_base.PacketBase, _TypeDisp): return subcls(length, router_id, area_id, au_type, authentication, checksum, version, **kwargs), None, rest + @classmethod + def parser(cls, buf): + try: + return cls._parser(buf) + except: + return None, None, buf + def serialize(self): tail = self.serialize_tail() self.length = self._HDR_LEN + len(tail) |