aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-wsp.c
diff options
context:
space:
mode:
authorGerald Combs <gerald@wireshark.org>2005-04-17 05:11:25 +0000
committerGerald Combs <gerald@wireshark.org>2005-04-17 05:11:25 +0000
commitefd08d91bc854188407ae2da13cd9b85edbb2e54 (patch)
tree298c0a8779eadbdbd9ca4d12f602940318d63c70 /epan/dissectors/packet-wsp.c
parent67a2c952a676782641b27eb4a11bb0f3d4973dfe (diff)
Add even more calls to tvb_ensure_bytes_exist().
svn path=/trunk/; revision=14111
Diffstat (limited to 'epan/dissectors/packet-wsp.c')
-rw-r--r--epan/dissectors/packet-wsp.c85
1 files changed, 85 insertions, 0 deletions
diff --git a/epan/dissectors/packet-wsp.c b/epan/dissectors/packet-wsp.c
index 5f68dbab6f..b0ef58246e 100644
--- a/epan/dissectors/packet-wsp.c
+++ b/epan/dissectors/packet-wsp.c
@@ -1794,6 +1794,7 @@ add_headers (proto_tree *tree, tvbuff_t *tvb, int hf, packet_info *pinfo)
if (val_id >= 0x20 && val_id <=0x7E) { /* OK! */
val_str = (gchar *)tvb_get_stringz(tvb, val_start, (gint *)&val_len);
offset = val_start + val_len;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset-hdr_start);
proto_tree_add_text(wsp_headers,tvb,hdr_start,offset-hdr_start,
"%s: %s", hdr_str, val_str);
g_free (val_str);
@@ -1832,6 +1833,7 @@ add_headers (proto_tree *tree, tvbuff_t *tvb, int hf, packet_info *pinfo)
}
offset = tvb_len;
}
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
proto_tree_add_string_hidden(wsp_headers, hf_hdr_name,
tvb, hdr_start, offset - hdr_start, hdr_str);
} else if (hdr_id > 0) { /* Shorthand HCP switch */
@@ -1974,16 +1976,19 @@ wkh_default(proto_tree *tree, tvbuff_t *tvb,
ok = TRUE; /* Bypass error checking as we don't parse the values! */
wkh_1_WellKnownValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_text (tree, tvb, hdr_start, offset - hdr_start,
"%s: (Undecoded well-known value 0x%02x)",
val_to_str (hdr_id, vals_field_names,
"<Unknown WSP header field 0x%02X>"), val_id & 0x7F);
wkh_2_TextualValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_text(tree, tvb, hdr_start, offset - hdr_start,
"%s: %s",
val_to_str (hdr_id, vals_field_names,
"<Unknown WSP header field 0x%02X>"), val_str);
wkh_3_ValueWithLength;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_text (tree, tvb, hdr_start, offset - hdr_start,
"%s: (Undecoded value in general form with length indicator)",
val_to_str (hdr_id, vals_field_names,
@@ -2119,6 +2124,7 @@ add_content_type(proto_tree *tree, tvbuff_t *tvb, guint32 val_start,
DebugLog(("add_content_type() - Well-known - Start\n"));
*textual_content = val_to_str(val_id & 0x7F, vals_content_types,
"<Unknown media type identifier 0x%X>");
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_content_type,
tvb, hdr_start, offset - hdr_start,
*textual_content);
@@ -2130,6 +2136,7 @@ add_content_type(proto_tree *tree, tvbuff_t *tvb, guint32 val_start,
/* Sometimes with a No-Content response, a NULL content type
* is reported. Process this correctly! */
if (*val_str) {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_content_type,
tvb, hdr_start, offset - hdr_start,
val_str);
@@ -2137,6 +2144,7 @@ add_content_type(proto_tree *tree, tvbuff_t *tvb, guint32 val_start,
*textual_content = g_strdup(val_str);
*well_known_content = 0;
} else {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_content_type,
tvb, hdr_start, offset - hdr_start,
"<no media type has been specified>");
@@ -2155,6 +2163,7 @@ add_content_type(proto_tree *tree, tvbuff_t *tvb, guint32 val_start,
/* As we're using val_str, it is automatically g_free()d */
/* ??? Not sure anymore, we're in wkh_3, not in wkh_2 ! */
off += len; /* off now points to 1st byte after string */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string (tree, hf_hdr_content_type,
tvb, hdr_start, offset - hdr_start, val_str);
/* Following statement: required? */
@@ -2166,6 +2175,7 @@ add_content_type(proto_tree *tree, tvbuff_t *tvb, guint32 val_start,
if (ok) {
*textual_content = val_to_str(val, vals_content_types,
"<Unknown media type identifier 0x%X>");
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_content_type,
tvb, hdr_start, offset - hdr_start,
*textual_content);
@@ -2273,6 +2283,7 @@ wkh_push_flag(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info *p
proto_tree *subtree = NULL;
wkh_1_WellKnownValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_push_flag,
tvb, hdr_start, offset - hdr_start, "");
subtree = proto_item_add_subtree(ti, ett_header);
@@ -2318,6 +2329,7 @@ static guint32 wkh_profile_diff_wbxml (proto_tree *tree, tvbuff_t *tvb,
wkh_2_TextualValue;
/* Invalid */
wkh_3_ValueWithLength;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_profile_diff, tvb, hdr_start, offset - hdr_start,
"(Profile-Diff value as WBXML)");
subtree = proto_item_add_subtree(ti, ett_header);
@@ -2340,6 +2352,7 @@ wkh_allow(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info *pinfo
wkh_1_WellKnownValue;
val_id &= 0x7F;
if (val_id >= 0x40) { /* Valid WSP method */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_allow,
tvb, hdr_start, offset - hdr_start,
val_to_str(val_id & 0x7F, vals_pdu_type,
@@ -2366,6 +2379,7 @@ wkh_public(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info *pinf
wkh_1_WellKnownValue;
val_id &= 0x7F;
if (val_id >= 0x40) { /* Valid WSP method */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_public,
tvb, hdr_start, offset - hdr_start,
val_to_str(val_id & 0x7F, vals_pdu_type,
@@ -2373,6 +2387,7 @@ wkh_public(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info *pinf
ok = TRUE;
}
wkh_2_TextualValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_public,
tvb, hdr_start, offset - hdr_start, val_str);
ok = TRUE;
@@ -2392,12 +2407,14 @@ wkh_vary(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info *pinfo
wkh_0_Declarations;
wkh_1_WellKnownValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_vary,
tvb, hdr_start, offset - hdr_start,
val_to_str(val_id & 0x7F, vals_field_names,
"<Unknown WSP header field 0x%02X>"));
ok = TRUE;
wkh_2_TextualValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_vary,
tvb, hdr_start, offset - hdr_start,
val_str);
@@ -2418,6 +2435,7 @@ wkh_x_wap_security(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_in
wkh_1_WellKnownValue;
if (val_id == 0x80) {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_x_wap_security,
tvb, hdr_start, offset - hdr_start, "close-subordinate");
ok = TRUE;
@@ -2440,11 +2458,13 @@ wkh_connection(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info *
wkh_1_WellKnownValue;
if (val_id == 0x80) {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_connection,
tvb, hdr_start, offset - hdr_start, "close");
ok = TRUE;
}
wkh_2_TextualValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_connection,
tvb, hdr_start, offset - hdr_start, val_str);
ok = TRUE;
@@ -2464,11 +2484,13 @@ wkh_transfer_encoding(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet
wkh_1_WellKnownValue;
if (val_id == 0x80) {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_transfer_encoding,
tvb, hdr_start, offset - hdr_start, "chunked");
ok = TRUE;
}
wkh_2_TextualValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_transfer_encoding,
tvb, hdr_start, offset - hdr_start, val_str);
ok = TRUE;
@@ -2489,17 +2511,20 @@ wkh_accept_ranges(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_inf
wkh_1_WellKnownValue;
switch (val_id) {
case 0x80: /* none */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_accept_ranges,
tvb, hdr_start, offset - hdr_start, "none");
ok = TRUE;
break;
case 0x81: /* bytes */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_accept_ranges,
tvb, hdr_start, offset - hdr_start, "bytes");
ok = TRUE;
break;
}
wkh_2_TextualValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_accept_ranges,
tvb, hdr_start, offset - hdr_start, val_str);
ok = TRUE;
@@ -2520,22 +2545,26 @@ wkh_content_encoding(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_
wkh_1_WellKnownValue;
switch (val_id) {
case 0x80: /* gzip */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_content_encoding,
tvb, hdr_start, offset - hdr_start, "gzip");
ok = TRUE;
break;
case 0x81: /* compress */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_content_encoding,
tvb, hdr_start, offset - hdr_start, "compress");
ok = TRUE;
break;
case 0x82: /* deflate */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_content_encoding,
tvb, hdr_start, offset - hdr_start, "deflate");
ok = TRUE;
break;
}
wkh_2_TextualValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_content_encoding,
tvb, hdr_start, offset - hdr_start, val_str);
ok = TRUE;
@@ -2563,22 +2592,26 @@ wkh_accept_encoding(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_i
wkh_1_WellKnownValue;
switch (val_id) {
case 0x80: /* gzip */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_accept_encoding,
tvb, hdr_start, offset - hdr_start, "gzip");
ok = TRUE;
break;
case 0x81: /* compress */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_accept_encoding,
tvb, hdr_start, offset - hdr_start, "compress");
ok = TRUE;
break;
case 0x82: /* deflate */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_accept_encoding,
tvb, hdr_start, offset - hdr_start, "deflate");
ok = TRUE;
break;
}
wkh_2_TextualValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
proto_tree_add_string(tree, hf_hdr_accept_encoding,
tvb, hdr_start, offset - hdr_start, val_str);
ok = TRUE;
@@ -2588,21 +2621,25 @@ wkh_accept_encoding(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_i
if (is_short_integer(peek)) {
switch (val_id) {
case 0x80: /* gzip */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_accept_encoding,
tvb, hdr_start, offset - hdr_start, "gzip");
ok = TRUE;
break;
case 0x81: /* compress */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_accept_encoding,
tvb, hdr_start, offset - hdr_start, "compress");
ok = TRUE;
break;
case 0x82: /* deflate */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_accept_encoding,
tvb, hdr_start, offset - hdr_start, "deflate");
ok = TRUE;
break;
case 0x83: /* any */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_accept_encoding,
tvb, hdr_start, offset - hdr_start, "*");
ok = TRUE;
@@ -2612,6 +2649,7 @@ wkh_accept_encoding(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_i
} else {
get_token_text(str, tvb, off, len, ok);
if (ok) {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_accept_encoding,
tvb, hdr_start, offset - hdr_start, str);
g_free(str);
@@ -2657,16 +2695,19 @@ wkh_content_disposition(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, pack
if (is_short_integer(peek)) {
switch (peek) {
case 0x80: /* form-data */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_content_disposition,
tvb, hdr_start, offset - hdr_start, "form-data");
ok = TRUE;
break;
case 0x81: /* attachment */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_content_disposition,
tvb, hdr_start, offset - hdr_start, "attachment");
ok = TRUE;
break;
case 0x82: /* inline */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_content_disposition,
tvb, hdr_start, offset - hdr_start, "inline");
ok = TRUE;
@@ -2676,6 +2717,7 @@ wkh_content_disposition(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, pack
} else {
get_token_text(str, tvb, off, len, ok);
if (ok) {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_content_disposition,
tvb, hdr_start, offset - hdr_start, str);
g_free(str);
@@ -2920,6 +2962,7 @@ wkh_age(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info *pinfo _
wkh_1_WellKnownValue;
val = val_id & 0x7F;
val_str = g_strdup_printf("%u second%s", val, plurality(val, "", "s"));
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_age,
tvb, hdr_start, offset - hdr_start, val_str);
g_free(val_str); /* proto_XXX creates a copy */
@@ -2931,6 +2974,7 @@ wkh_age(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info *pinfo _
get_long_integer(val, tvb, off, len, ok);
if (ok) {
val_str = g_strdup_printf("%u second%s", val, plurality(val, "", "s"));
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_age,
tvb, hdr_start, offset - hdr_start, val_str);
g_free(val_str); /* proto_XXX creates a copy */
@@ -3194,6 +3238,7 @@ wkh_content_md5 (proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info
tvb_get_guint8(tvb, off + 14),
tvb_get_guint8(tvb, off + 15)
);
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_content_md5,
tvb, hdr_start, offset - hdr_start, val_str);
g_free(val_str);
@@ -3214,6 +3259,7 @@ wkh_pragma(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info *pinf
wkh_1_WellKnownValue;
if (val_id == 0x80) {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_pragma,
tvb, hdr_start, offset - hdr_start, "no-cache");
ok = TRUE;
@@ -3222,6 +3268,7 @@ wkh_pragma(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info *pinf
/* Invalid */
wkh_3_ValueWithLength;
off = val_start + val_len_len;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_pragma,
tvb, hdr_start, off - hdr_start, "");
/* NULL subtree for parameter() results in no subtree
@@ -3333,11 +3380,13 @@ wkh_cache_control(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_inf
val = val_id & 0x7F;
val_str = match_strval(val, vals_cache_control);
if (val_str) {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_cache_control,
tvb, hdr_start, offset - hdr_start, val_str);
ok = TRUE;
}
wkh_2_TextualValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_cache_control,
tvb, hdr_start, offset - hdr_start, val_str);
ok = TRUE;
@@ -3355,6 +3404,7 @@ wkh_cache_control(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_inf
switch (cache_control_directive & 0x7F) {
case CACHE_CONTROL_NO_CACHE:
case CACHE_CONTROL_PRIVATE:
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_cache_control,
tvb, hdr_start, offset - hdr_start,
val_to_str (cache_control_directive & 0x7F, vals_cache_control,
@@ -3383,6 +3433,7 @@ wkh_cache_control(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_inf
case CACHE_CONTROL_MAX_STALE:
case CACHE_CONTROL_MIN_FRESH:
case CACHE_CONTROL_S_MAXAGE:
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_cache_control,
tvb, hdr_start, offset - hdr_start,
val_to_str (cache_control_directive & 0x7F, vals_cache_control,
@@ -3403,6 +3454,7 @@ wkh_cache_control(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_inf
} else if (is_token_text(cache_control_directive)) {
get_token_text(val_str, tvb, off, len, ok);
if (ok) {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_cache_control,
tvb, hdr_start, offset - hdr_start, val_str);
g_free(val_str);
@@ -3457,6 +3509,7 @@ wkh_warning(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info *pin
val = val_id & 0x7F;
val_str = match_strval(val, vals_wsp_warning_code);
if (val_str) {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_warning,
tvb, hdr_start, offset - hdr_start, val_str);
subtree = proto_item_add_subtree(ti, ett_header);
@@ -3475,6 +3528,7 @@ wkh_warning(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info *pin
val_str = match_strval(val, vals_wsp_warning_code_short);
if (val_str) { /* OK */
str = g_strdup_printf("code=%s", val_str);
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_warning,
tvb, hdr_start, offset - hdr_start, str);
g_free(str);
@@ -3527,6 +3581,7 @@ wkh_profile_warning(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_i
val = val_id & 0x7F;
val_str = match_strval(val, vals_wsp_profile_warning_code);
if (val_str) {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_profile_warning,
tvb, hdr_start, offset - hdr_start, val_str);
ok = TRUE;
@@ -3539,6 +3594,7 @@ wkh_profile_warning(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_i
if (warn_code & 0x80) { /* Well known warn code */
val_str = match_strval(val, vals_wsp_profile_warning_code);
if (val_str) { /* OK */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_profile_warning,
tvb, hdr_start, offset - hdr_start, val_str);
get_uri_value(str, tvb, off, len, ok);
@@ -3586,11 +3642,13 @@ static guint32 wkh_encoding_version (proto_tree *tree, tvbuff_t *tvb,
wkh_1_WellKnownValue;
val = val_id & 0x7F;
val_str = g_strdup_printf("%u.%u", val >> 4, val & 0x0F);
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
proto_tree_add_string(tree, hf_hdr_encoding_version,
tvb, hdr_start, offset - hdr_start, val_str);
g_free(val_str);
ok = TRUE;
wkh_2_TextualValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
proto_tree_add_string(tree, hf_hdr_encoding_version,
tvb, hdr_start, offset - hdr_start, val_str);
ok = TRUE;
@@ -3599,6 +3657,7 @@ static guint32 wkh_encoding_version (proto_tree *tree, tvbuff_t *tvb,
val = tvb_get_guint8(tvb, off);
if (val & 0x80) { /* Header Code Page */
val_str = g_strdup_printf("code-page=%u", val & 0x7F);
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_encoding_version,
tvb, hdr_start, offset - hdr_start, val_str);
g_free(val_str);
@@ -3638,6 +3697,7 @@ wkh_content_range(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_inf
get_uintvar_integer (val, tvb, off, len, ok); /* Uintvar start */
if (ok) {
val_str = g_strdup_printf("first-byte-pos=%u", val);
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_content_range,
tvb, hdr_start, offset - hdr_start, val_str);
subtree = proto_item_add_subtree(ti, ett_header);
@@ -3686,6 +3746,7 @@ wkh_range(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info *pinfo
off = val_start + val_len_len;
val = tvb_get_guint8(tvb, off);
if (val == 0x80) { /* Byte-range */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_range,
tvb, hdr_start, offset - hdr_start, "byte-range");
subtree = proto_item_add_subtree(ti, ett_header);
@@ -3712,6 +3773,7 @@ wkh_range(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_info *pinfo
}
}
} else if (val == 0x81) { /* Suffix-byte-range */
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_range,
tvb, hdr_start, offset - hdr_start, "suffix-byte-range");
subtree = proto_item_add_subtree(ti, ett_header);
@@ -3741,6 +3803,7 @@ static guint32 wkh_te (proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packe
wkh_1_WellKnownValue;
if (val_id == 0x81) {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
proto_tree_add_string(tree, hf_hdr_encoding_version,
tvb, hdr_start, offset - hdr_start, "trailers");
ok = TRUE;
@@ -3753,6 +3816,7 @@ static guint32 wkh_te (proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packe
if (val & 0x80) { /* Well-known-TE */
val_str = match_strval((val & 0x7F), vals_well_known_te);
if (val_str) {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_te,
tvb, hdr_start, off - hdr_start, val_str);
off++;
@@ -3761,6 +3825,7 @@ static guint32 wkh_te (proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packe
} else { /* TE in Token-text format */
get_token_text(val_str, tvb, off, len, ok);
if (ok) {
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_string(tree, hf_hdr_te,
tvb, hdr_start, off - hdr_start, val_str);
g_free(val_str);
@@ -3788,6 +3853,7 @@ static guint32 wkh_te (proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packe
*/
#undef wkh_1_WellKnownValue
#define wkh_1_WellKnownValue /* Parse Well Known Value */ \
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start); \
proto_tree_add_string_hidden(tree, hf_hdr_name, \
tvb, hdr_start, offset - hdr_start, \
val_to_str (hdr_id, vals_openwave_field_names, \
@@ -3836,16 +3902,19 @@ wkh_openwave_default(proto_tree *tree, tvbuff_t *tvb, guint32 hdr_start, packet_
ok = TRUE; /* Bypass error checking as we don't parse the values! */
wkh_1_WellKnownValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_text(tree, tvb, hdr_start, offset - hdr_start,
"%s: (Undecoded well-known value 0x%02x)",
val_to_str (hdr_id, vals_openwave_field_names,
"<Unknown WSP header field 0x%02X>"), val_id & 0x7F);
wkh_2_TextualValue;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_text(tree,tvb,hdr_start, offset - hdr_start,
"%s: %s",
val_to_str (hdr_id, vals_openwave_field_names,
"<Unknown WSP header field 0x%02X>"), val_str);
wkh_3_ValueWithLength;
+ tvb_ensure_bytes_exist(tvb, hdr_start, offset - hdr_start);
ti = proto_tree_add_text(tree, tvb, hdr_start, offset - hdr_start,
"%s: (Undecoded value in general form with length indicator)",
val_to_str (hdr_id, vals_openwave_field_names,
@@ -4032,10 +4101,12 @@ parameter (proto_tree *tree, proto_item *ti, tvbuff_t *tvb, int start, int len)
if (is_quoted_string(val_str[0])) { /* Add trailing quote! */
if (is_quoted_string(val_str[val_len-2])) {
/* Trailing quote - issue a warning */
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_text(tree, tvb, start, offset - start,
"%s: %s" TrailingQuoteWarning, str, val_str);
s = g_strdup_printf("; %s=%s", str, val_str);
} else { /* OK (no trailing quote) */
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_text(tree, tvb, start, offset - start,
"%s: %s\"", str, val_str);
s = g_strdup_printf("; %s=%s\"", str, val_str);
@@ -4043,6 +4114,7 @@ parameter (proto_tree *tree, proto_item *ti, tvbuff_t *tvb, int start, int len)
} else { /* Token-text | 0x00 */
/* TODO - verify that it is either Token-text or 0x00
* and flag with warning if invalid */
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_text(tree, tvb, start, offset - start,
"%s: %s", str, val_str);
s = g_strdup_printf("; %s=%s", str, val_str);
@@ -4061,6 +4133,7 @@ parameter (proto_tree *tree, proto_item *ti, tvbuff_t *tvb, int start, int len)
get_integer_value (val,tvb,offset,val_len,ok);
if (ok) { /* Also found a valid integer parameter value: val */
offset += val_len;
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_text(tree, tvb, start, offset - start,
"%s: %u", str, val);
s = g_strdup_printf("; %s=%u", str, val);
@@ -4071,6 +4144,7 @@ parameter (proto_tree *tree, proto_item *ti, tvbuff_t *tvb, int start, int len)
* protocol tree for the untyped parameter case */
} else { /* Error: neither token-text not Integer-value */
DebugLog(("Invalid untyped parameter value!\n"));
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_text (tree, tvb, start, offset - start,
"<Error: Invalid untyped parameter definition>");
offset = start + len; /* Skip to end of buffer */
@@ -4087,6 +4161,7 @@ parameter (proto_tree *tree, proto_item *ti, tvbuff_t *tvb, int start, int len)
DebugLog(("parameter() - Typed - Start\n"));
get_integer_value (type,tvb,start,type_len,ok);
if (!ok) {
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_text (tree, tvb, start, offset - start,
"<Error: Invalid typed parameter definition>");
return (start + len); /* Skip to end of buffer */
@@ -4165,6 +4240,7 @@ parameter (proto_tree *tree, proto_item *ti, tvbuff_t *tvb, int start, int len)
} /* Else: invalid parameter value */
}
if (ok) {
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_string (tree, hf_wsp_parameter_upart_type,
tvb, start, offset - start, val_str);
str = g_strdup_printf("; type=%s", val_str);
@@ -4288,48 +4364,56 @@ parameter (proto_tree *tree, proto_item *ti, tvbuff_t *tvb, int start, int len)
case 0x07: /* WSP 1.1 encoding - Differences: Field-name */
DebugLog(("Skipping remaining parameters from here\n"));
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_text(tree, tvb, start, offset - start,
"Undecoded parameter Differences - decoding stopped");
break;
case 0x08: /* WSP 1.1 encoding - Padding: Short-integer */
DebugLog(("Skipping remaining parameters from here\n"));
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_text(tree, tvb, start, offset - start,
"Undecoded parameter Padding - decoding stopped");
break;
case 0x0E: /* WSP 1.3 encoding - Max-Age: Delta-seconds-value */
DebugLog(("Skipping remaining parameters from here\n"));
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_text(tree, tvb, start, offset - start,
"Undecoded parameter Max-Age - decoding stopped");
break;
case 0x10: /* WSP 1.3 encoding - Secure: No-value */
DebugLog(("Skipping remaining parameters from here\n"));
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_text(tree, tvb, start, offset - start,
"Undecoded parameter Secure - decoding stopped");
break;
case 0x13: /* WSP 1.4 encoding - Creation-date: Date-value */
DebugLog(("Skipping remaining parameters from here\n"));
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_text(tree, tvb, start, offset - start,
"Undecoded parameter Creation-Date - decoding stopped");
break;
case 0x14: /* WSP 1.4 encoding - Modification-date: Date-value */
DebugLog(("Skipping remaining parameters from here\n"));
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_text(tree, tvb, start, offset - start,
"Undecoded parameter Modification-Date - decoding stopped");
break;
case 0x15: /* WSP 1.4 encoding - Read-date: Date-value */
DebugLog(("Skipping remaining parameters from here\n"));
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_text(tree, tvb, start, offset - start,
"Undecoded parameter Read-Date - decoding stopped");
break;
default:
DebugLog(("Skipping remaining parameters from here\n"));
+ tvb_ensure_bytes_exist(tvb, start, offset - start);
proto_tree_add_text(tree, tvb, start, offset - start,
"Undecoded parameter type 0x%02x - decoding stopped",
type);
@@ -5875,6 +5959,7 @@ add_multipart_data (proto_tree *tree, tvbuff_t *tvb, packet_info *pinfo)
DataLen = tvb_get_guintvar (tvb, offset, &count);
offset += count;
if (tree) {
+ tvb_ensure_bytes_exist(tvb, part_start, HeadersLen + DataLen + (offset - part_start));
ti = proto_tree_add_uint(sub_tree, hf_wsp_mpart, tvb, part_start,
HeadersLen + DataLen + (offset - part_start), partnr);
mpart_tree = proto_item_add_subtree(ti, ett_multiparts);