Fix bug #2531: UDP packet on port 8000 incorrectly dissected as OICQ protocol.
authorStephen Fisher <steve@stephen-fisher.com>
Sat, 17 May 2008 23:40:07 +0000 (23:40 -0000)
committerStephen Fisher <steve@stephen-fisher.com>
Sat, 17 May 2008 23:40:07 +0000 (23:40 -0000)
Changed OICQ dissector to be a new style dissector that checks to make sure
two of the fields match defined string values before continuing dissection.

svn path=/trunk/; revision=25317

epan/dissectors/packet-oicq.c

index ba0581dc2474055c64ac96ff98e723421b01184e..55beac75cdfd0be3dcc2fa474f29d5d0eed15ffb 100644 (file)
@@ -113,13 +113,18 @@ static const value_string oicq_command_vals[] = {
  * pinfo - packet info
  * proto_tree - resolved protocol tree
  */
-static void
+static int
 dissect_oicq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
 {
        proto_tree      *oicq_tree;
        proto_item      *ti;
        int offset = 0;
-       
+
+       /* Make sure this packet is for us */
+       if(match_strval(tvb_get_guint8(tvb, 0), oicq_flag_vals) == NULL &&
+          match_strval(tvb_get_ntohs(tvb, 3), oicq_command_vals) == NULL)
+               return 0;
+
        if (check_col(pinfo->cinfo, COL_PROTOCOL))
                col_set_str(pinfo->cinfo, COL_PROTOCOL, "OICQ");
 
@@ -155,6 +160,8 @@ dissect_oicq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
                
                
        }
+       
+       return tvb_length(tvb);
 }
 
 void
@@ -195,7 +202,7 @@ proto_reg_handoff_oicq(void)
 {
        dissector_handle_t oicq_handle;
 
-       oicq_handle = create_dissector_handle(dissect_oicq, proto_oicq);
+       oicq_handle = new_create_dissector_handle(dissect_oicq, proto_oicq);
        dissector_add("udp.port", UDP_PORT_OICQ, oicq_handle);
 }