aboutsummaryrefslogtreecommitdiffstats
path: root/packet-wcp.c
diff options
context:
space:
mode:
authorjfoster <jfoster@f5534014-38df-0310-8fa8-9805f1628bb7>2001-03-23 20:47:17 +0000
committerjfoster <jfoster@f5534014-38df-0310-8fa8-9805f1628bb7>2001-03-23 20:47:17 +0000
commit21609cf91c4692402c63572d3d3fde3a442846f1 (patch)
tree57aea3d3e0ef7f2e673c0ed3aca1fcfc29ef2a57 /packet-wcp.c
parent1a9eec385c86e5107066fe80908eb85ef75ca056 (diff)
Fixed problem in wcp_uncompress. If the proto_tree was null the program
would segfault when creating the sub-tree. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@3170 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'packet-wcp.c')
-rw-r--r--packet-wcp.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/packet-wcp.c b/packet-wcp.c
index 9665cfea1f..2937e8d605 100644
--- a/packet-wcp.c
+++ b/packet-wcp.c
@@ -2,7 +2,7 @@
* Routines for Wellfleet Compression frame disassembly
* Copyright 2001, Jeffrey C. Foster <jfoste@woodward.com>
*
- * $Id: packet-wcp.c,v 1.1 2001/03/23 19:22:02 jfoster Exp $
+ * $Id: packet-wcp.c,v 1.2 2001/03/23 20:47:17 jfoster Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@zing.org>
@@ -530,24 +530,28 @@ static tvbuff_t *wcp_uncompress( tvbuff_t *src_tvb, int offset, packet_info *pin
dst = decompressed_entry( src, dst, &len, buf_start, buf_end);
}
if ((*src & 0xf0) == 0x10){
- ti = proto_tree_add_item( tree, hf_wcp_long_run, src_tvb,
+ if ( tree) {
+ ti = proto_tree_add_item( tree, hf_wcp_long_run, src_tvb,
offset-1, 3, 0);
- sub_tree = proto_item_add_subtree(ti, ett_wcp_field);
- proto_tree_add_uint(sub_tree, hf_wcp_offset, src_tvb,
+ sub_tree = proto_item_add_subtree(ti, ett_wcp_field);
+ proto_tree_add_uint(sub_tree, hf_wcp_offset, src_tvb,
offset-1, 2, pntohs(src));
- proto_tree_add_item( sub_tree, hf_wcp_long_len, src_tvb,
+ proto_tree_add_item( sub_tree, hf_wcp_long_len, src_tvb,
offset+1, 1, pntohs(src));
+ }
src += 3;
offset += 2;
}else{
- ti = proto_tree_add_item( tree, hf_wcp_short_run, src_tvb,
+ if ( tree) {
+ ti = proto_tree_add_item( tree, hf_wcp_short_run, src_tvb,
offset - 1, 2, *src);
- sub_tree = proto_item_add_subtree(ti, ett_wcp_field);
- proto_tree_add_item( sub_tree, hf_wcp_short_len, src_tvb,
+ sub_tree = proto_item_add_subtree(ti, ett_wcp_field);
+ proto_tree_add_item( sub_tree, hf_wcp_short_len, src_tvb,
offset-1, 1, *src);
- proto_tree_add_uint(sub_tree, hf_wcp_offset, src_tvb,
+ proto_tree_add_uint(sub_tree, hf_wcp_offset, src_tvb,
offset-1, 2, pntohs(src));
+ }
src += 2;
offset += 1;
}
@@ -571,7 +575,9 @@ static tvbuff_t *wcp_uncompress( tvbuff_t *src_tvb, int offset, packet_info *pin
}else { /* compressed data flag */
comp_flag_bits = *src++;
- proto_tree_add_uint( tree, hf_wcp_comp_bits, src_tvb, offset-1, 1, comp_flag_bits);
+ if (tree)
+ proto_tree_add_uint( tree, hf_wcp_comp_bits, src_tvb, offset-1, 1,
+ comp_flag_bits);
i = 8;
}