aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2000-12-28 10:10:17 +0000
committerGuy Harris <guy@alum.mit.edu>2000-12-28 10:10:17 +0000
commit11e59a0078d5f9ff85f6d0db56aa522068cc7dad (patch)
tree65a3ccf8522f4b06ce234e4af0bf77225ef762ad
parentd13901155d5108fc756bf2b4a4608fa9af73a146 (diff)
Updates from Ed Warnicke.
svn path=/trunk/; revision=2793
-rw-r--r--plugins/mgcp/ChangeLog3
-rw-r--r--plugins/mgcp/moduleinfo.h2
-rw-r--r--plugins/mgcp/packet-mgcp.c74
3 files changed, 49 insertions, 30 deletions
diff --git a/plugins/mgcp/ChangeLog b/plugins/mgcp/ChangeLog
index e69de29bb2..163d606266 100644
--- a/plugins/mgcp/ChangeLog
+++ b/plugins/mgcp/ChangeLog
@@ -0,0 +1,3 @@
+Overview of changes in Ethereal MGCP plugin 0.0.2:
+* Fixed misc problems with improperly dissecting some xgcp packets as
+ short or malformed.
diff --git a/plugins/mgcp/moduleinfo.h b/plugins/mgcp/moduleinfo.h
index 133e12504e..04cb052c96 100644
--- a/plugins/mgcp/moduleinfo.h
+++ b/plugins/mgcp/moduleinfo.h
@@ -13,5 +13,5 @@
#endif
/* Version number of package */
-#define VERSION "0.0.1"
+#define VERSION "0.0.2"
diff --git a/plugins/mgcp/packet-mgcp.c b/plugins/mgcp/packet-mgcp.c
index fdb070baf1..09491a133e 100644
--- a/plugins/mgcp/packet-mgcp.c
+++ b/plugins/mgcp/packet-mgcp.c
@@ -2,7 +2,7 @@
* Routines for mgcp packet disassembly
* RFC 2705
*
- * $Id: packet-mgcp.c,v 1.10 2000/12/25 09:37:35 guy Exp $
+ * $Id: packet-mgcp.c,v 1.11 2000/12/28 10:10:17 guy Exp $
*
* Copyright (c) 2000 by Ed Warnicke <hagbard@physics.rutgers.edu>
*
@@ -812,15 +812,18 @@ static void dissect_mgcp_firstline(tvbuff_t *tvb,
my_proto_tree_add_string = proto_tree_add_string_hidden;
}
- tvb_current_offset = tvb_find_guint8(tvb,tvb_previous_offset,
- tvb_current_len, ' ');
- if(tvb_current_offset == -1){
- tvb_current_offset = tvb_len;
- }
- tvb_current_len = tvb_length_remaining(tvb,tvb_previous_offset);
- tokenlen = tvb_current_offset - tvb_previous_offset;
+ do {
+ tvb_current_len = tvb_length_remaining(tvb,tvb_previous_offset);
+ tvb_current_offset = tvb_find_guint8(tvb, tvb_previous_offset,
+ tvb_current_len, ' ');
+ if(tvb_current_offset == -1){
+ tvb_current_offset = tvb_len;
+ tokenlen = tvb_current_len;
+ }
+ else{
+ tokenlen = tvb_current_offset - tvb_previous_offset;
+ }
- while( tvb_current_offset < tvb_len || tokennum <= 3){
if(tokennum == 0){
if(is_mgcp_verb(tvb,tvb_previous_offset,tvb_current_len)){
mgcp_type = MGCP_REQUEST;
@@ -849,38 +852,46 @@ static void dissect_mgcp_firstline(tvbuff_t *tvb,
if(tokennum == 2){
if(mgcp_type == MGCP_REQUEST){
my_proto_tree_add_string(tree,hf_mgcp_req_endpoint, tvb,
- tvb_previous_offset, tokenlen,
- tvb_format_text(tvb, tvb_previous_offset,
- tokenlen));
+ tvb_previous_offset, tokenlen,
+ tvb_format_text(tvb, tvb_previous_offset,
+ tokenlen));
}
else if(mgcp_type == MGCP_RESPONSE){
- tokenlen = tvb_find_line_end(tvb, tvb_previous_offset,
- -1,&tvb_current_offset);
- my_proto_tree_add_string(tree,hf_mgcp_rsp_rspstring, tvb,
+ if(tvb_current_offset < tvb_len){
+ tokenlen = tvb_find_line_end(tvb, tvb_previous_offset,
+ -1,&tvb_current_offset);
+ }
+ else{
+ tokenlen = tvb_current_len;
+ }
+ my_proto_tree_add_string(tree, hf_mgcp_rsp_rspstring, tvb,
tvb_previous_offset, tokenlen,
- tvb_format_text(tvb,tvb_previous_offset,
+ tvb_format_text(tvb, tvb_previous_offset,
tokenlen));
- break;
- }
+ }
+ break;
}
if( (tokennum == 3 && mgcp_type == MGCP_REQUEST) ){
- tokenlen = tvb_find_line_end(tvb, tvb_previous_offset,
- -1,&tvb_current_offset);
+ if(tvb_current_offset < tvb_len ){
+ tokenlen = tvb_find_line_end(tvb, tvb_previous_offset,
+ -1,&tvb_current_offset);
+ }
+ else{
+ tokenlen = tvb_current_len;
+ }
my_proto_tree_add_string(tree,hf_mgcp_version, tvb,
tvb_previous_offset, tokenlen,
tvb_format_text(tvb,tvb_previous_offset,
tokenlen));
break;
}
- tvb_previous_offset = tvb_skip_wsp(tvb, tvb_current_offset,
- tvb_current_len);
- tvb_current_len = tvb_length_remaining(tvb,tvb_previous_offset);
- tvb_current_offset = tvb_find_guint8(tvb,tvb_previous_offset,
- tvb_current_len, ' ');
- tokenlen = tvb_current_offset - tvb_previous_offset;
+ if(tvb_current_offset < tvb_len){
+ tvb_previous_offset = tvb_skip_wsp(tvb, tvb_current_offset,
+ tvb_current_len);
+ }
tokennum++;
- }
-
+ } while( tvb_current_offset < tvb_len && tvb_previous_offset < tvb_len
+ && tokennum <= 3);
switch (mgcp_type){
case MGCP_RESPONSE:
proto_tree_add_boolean_hidden(tree,hf_mgcp_rsp, NullTVB,0,0,1);
@@ -972,8 +983,13 @@ static void dissect_mgcp_params(tvbuff_t *tvb, packet_info *pinfo,
*/
static gint tvb_skip_wsp(tvbuff_t* tvb, gint offset, gint maxlength){
gint counter = offset;
- gint end = offset + maxlength;
+ gint end = offset + maxlength,tvb_len;
guint8 tempchar;
+ tvb_len = tvb_length(tvb);
+ end = offset + maxlength;
+ if(end >= tvb_len){
+ end = tvb_len;
+ }
for(counter = offset; counter < end &&
((tempchar = tvb_get_guint8(tvb,counter)) == ' ' ||
tempchar == '\t');counter++);