From bd738738829cec724c9a50007cf7667c826ae805 Mon Sep 17 00:00:00 2001 From: Simon Horman Date: Mon, 5 Mar 2012 09:34:06 +0700 Subject: Avoid loop in OFPAction.parser() OFPAction.parser() should call the parser of one of the classes registered in _ACTION_TYPES() rather than calling itself until a buffer underflow occurs. Also, it is not necessary to increment offset as the parser method of the registered classes re-parse the type and length and thus do not expect it to be incremented. Signed-off-by: Simon Horman Signed-off-by: FUJITA Tomonori --- ryu/ofproto/ofproto_v1_0_parser.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ryu/ofproto/ofproto_v1_0_parser.py b/ryu/ofproto/ofproto_v1_0_parser.py index 5ee4e3dd..b0d0e89b 100644 --- a/ryu/ofproto/ofproto_v1_0_parser.py +++ b/ryu/ofproto/ofproto_v1_0_parser.py @@ -144,8 +144,9 @@ class OFPAction(OFPActionHeader): def parser(cls, buf, offset): type_, len_ = struct.unpack_from( ofproto_v1_0.OFP_ACTION_HEADER_PACK_STR, buf, offset) - offset += ofproto_v1_0.OFP_ACTION_HEADER_SIZE - return cls.parser(buf, offset) + cls_ = cls._ACTION_TYPES.get(type_) + assert cls_ is not None + return cls_.parser(buf, offset) @OFPAction.register_action_type(ofproto_v1_0.OFPAT_OUTPUT, -- cgit v1.2.3