the same captured and reported lengths so that we don't end up throwing
BoundsErrors ("Packet size limited during capture") when the packet is simply
malformed.
This fixes one of the issues reported in https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8816
svn path=/trunk/; revision=50055
- next_tvb = tvb_new_subset(tvb, offset, tvb_length_remaining(tvb, offset), tmp_len);
+ gint length_remaining;
+
+ length_remaining = tvb_length_remaining(tvb, offset);
+ if (tmp_len > (guint32)length_remaining)
+ tmp_len = length_remaining;
+ next_tvb = tvb_new_subset(tvb, offset, tmp_len, tmp_len);
type(tag_impl, next_tvb, 0, actx, tree, hf_id);
offset += tmp_len;
} else {
type(tag_impl, next_tvb, 0, actx, tree, hf_id);
offset += tmp_len;
} else {
- *out_tvb = tvb_new_subset(tvb, offset, length_remaining, len);
+ if (len > (guint32)length_remaining)
+ len = length_remaining;
+ *out_tvb = tvb_new_subset(tvb, offset, len, len);
length_remaining = tvb_length_remaining(tvb, hoffset);
if (length_remaining > (eoffset - hoffset - (2 * ind_field)))
length_remaining = eoffset - hoffset - (2 * ind_field);
length_remaining = tvb_length_remaining(tvb, hoffset);
if (length_remaining > (eoffset - hoffset - (2 * ind_field)))
length_remaining = eoffset - hoffset - (2 * ind_field);
- next_tvb = tvb_new_subset(tvb, hoffset, length_remaining, eoffset - hoffset - (2 * ind_field));
+ next_tvb = tvb_new_subset(tvb, hoffset, length_remaining, length_remaining);
}
} else {
length_remaining = tvb_length_remaining(tvb, hoffset);
if (length_remaining > (eoffset - hoffset))
length_remaining = eoffset - hoffset;
}
} else {
length_remaining = tvb_length_remaining(tvb, hoffset);
if (length_remaining > (eoffset - hoffset))
length_remaining = eoffset - hoffset;
- next_tvb = tvb_new_subset(tvb, hoffset, length_remaining, eoffset - hoffset);
+ next_tvb = tvb_new_subset(tvb, hoffset, length_remaining, length_remaining);
else
next_tvb = tvb; /* we didn't make selection on this class/tag so pass it on */
#endif
else
next_tvb = tvb; /* we didn't make selection on this class/tag so pass it on */
#endif
- next_tvb = tvb_new_subset(tvb, hoffset, length_remaining, length);
+ next_tvb = tvb_new_subset(tvb, hoffset, length_remaining, length_remaining);
length_remaining = tvb_length_remaining(tvb, hoffset);
if (length_remaining>eoffset-hoffset)
length_remaining = eoffset-hoffset;
length_remaining = tvb_length_remaining(tvb, hoffset);
if (length_remaining>eoffset-hoffset)
length_remaining = eoffset-hoffset;
- next_tvb = tvb_new_subset(tvb, hoffset, length_remaining, eoffset-hoffset);
+ next_tvb = tvb_new_subset(tvb, hoffset, length_remaining, length_remaining);
imp_tag = FALSE;
if (seq->flags == BER_FLAGS_IMPLTAG)
imp_tag = FALSE;
if (seq->flags == BER_FLAGS_IMPLTAG)