summaryrefslogtreecommitdiff
path: root/packet-fix.c
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2003-06-12 08:33:32 +0000
committerGuy Harris <guy@alum.mit.edu>2003-06-12 08:33:32 +0000
commitee97ce31966f61de148ad85cb229e76a88801b02 (patch)
tree22f7363da150c57eb593a2e5871033e8b8585437 /packet-fix.c
parent04a87185285865ae91f903662c4bc721f66c8d88 (diff)
downloadwireshark-ee97ce31966f61de148ad85cb229e76a88801b02.tar.gz
Add new routines:
tvb_get_string() - takes a tvbuff, an offset, and a length as arguments, allocates a buffer big enough to hold a string with the specified number of bytes plus an added null terminator (i.e., length+1), copies the specified number of bytes from the tvbuff, at the specified offset, to that buffer and puts in a null terminator, and returns a pointer to that buffer (or throws an exception before allocating the buffer if that many bytes aren't available in the tvbuff); tvb_get_stringz() - takes a tvbuff, an offset, and a pointer to a "gint" as arguments, gets the size of the null-terminated string starting at the specified offset in the tvbuff (throwing an exception if the null terminator isn't found), allocates a buffer big enough to hold that string, copies the string to that buffer, and returns a pointer to that buffer and stores the length of the string (including the terminating null) in the variable pointed to by the "gint" pointer. Replace many pieces of code allocating a buffer and copying a string with calls to "tvb_get_string()" (for one thing, "tvb_get_string()" doesn't require you to remember that the argument to "tvb_get_nstringz0()" is the size of the buffer into which you're copying the string, which might be the length of the string to be copied *plus 1*). Don't use fixed-length buffers for null-terminated strings (even if the code that generates those packets has a #define to limit the length of the string). Use "tvb_get_stringz()", instead. In some cases where a value is fetched but is only used to pass an argument to a "proto_tree_add_XXX" routine, use "proto_tree_add_item()" instead. svn path=/trunk/; revision=7859
Diffstat (limited to 'packet-fix.c')
-rw-r--r--packet-fix.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/packet-fix.c b/packet-fix.c
index 9a82d0fcab..fa5b245b50 100644
--- a/packet-fix.c
+++ b/packet-fix.c
@@ -2,7 +2,7 @@
* Routines for Financial Information eXchange (FIX) Protocol dissection
* Copyright 2000, PC Drew <drewpc@ibsncentral.com>
*
- * $Id: packet-fix.c,v 1.5 2003/06/12 08:02:47 guy Exp $
+ * $Id: packet-fix.c,v 1.6 2003/06/12 08:33:29 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -867,8 +867,7 @@ dissect_fix(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
col_clear(pinfo->cinfo, COL_INFO);
}
- value = g_malloc(value_len);
- tvb_get_nstringz0(tvb, value_offset, value_len, value);
+ value = tvb_get_string(tvb, value_offset, value_len);
if (check_col(pinfo->cinfo, COL_INFO)) {
col_add_fstr(pinfo->cinfo, COL_INFO, "%s", (char *)g_datalist_get_data(&msg_types, value));
@@ -929,12 +928,10 @@ dissect_fix(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
packet. */
return TRUE;
}
- tag_str = g_malloc(tag_len);
- tvb_get_nstringz0(tvb, field_offset, tag_len, tag_str);
+ tag_str = tvb_get_string(tvb, field_offset, tag_len);
tag = atoi(tag_str);
- value = g_malloc(value_len);
- tvb_get_nstringz0(tvb, value_offset, value_len, value);
+ value = tvb_get_string(tvb, value_offset, value_len);
switch(tag) {
case 1: /* Field Account */
@@ -2912,6 +2909,7 @@ dissect_fix(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
proto_tree_add_string(fix_tree, hf_fix_SideComplianceID, tvb, offset, field_len, value);
break;
default:
+ /* XXX - it could be -1 if the tag isn't a number */
proto_tree_add_text(fix_tree, tvb, offset, field_len, "%i: %s", tag, value);
break;
}