summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSimon Horman <horms@verge.net.au>2012-03-05 09:34:06 +0700
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2012-03-07 15:31:20 +0900
commitbd738738829cec724c9a50007cf7667c826ae805 (patch)
tree7b62fccd4b8fec25afe1e37f23753dced60befc2
parent4bd7c5026cbec97d27971f02e282d428d1d997be (diff)
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 <horms@verge.net.au> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/ofproto/ofproto_v1_0_parser.py5
1 files 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,