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 <[email protected]>

---

I am unsure of the merit of using assert on error in this code.
---
 ryu/ofproto/ofproto_v1_0_parser.py |    5 +++--
 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 5ee4e3d..b0d0e89 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,
-- 
1.7.6.3


------------------------------------------------------------------------------
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to