summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2013-06-17 20:58:55 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2013-06-20 06:21:49 +0900
commitdf42ae87e887643272e02b9521886972154ebbfc (patch)
treec5a15f3695df7c9b543c7b8d12a1d1be2acdbb34
parent6080f2c0080aadeb9bdcb61e21c150c288ce7bc8 (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.py13
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:])