aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2013-07-23 17:31:39 +0000
committerJakub Zawadzki <darkjames-ws@darkjames.pl>2013-07-23 17:31:39 +0000
commitac16425a1f08909fa9a21347cc674e192ab22781 (patch)
tree8e381e6d723a1b73284f3f392b914f7f10f01cbf
parent761b763eaea8802313c0ad414c68509e29c901e8 (diff)
Free all cloned tvbs, not only first one.
svn path=/trunk/; revision=50844
-rw-r--r--epan/dissectors/packet-mime-encap.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/epan/dissectors/packet-mime-encap.c b/epan/dissectors/packet-mime-encap.c
index 4ea57a55cb..fe3556ddd4 100644
--- a/epan/dissectors/packet-mime-encap.c
+++ b/epan/dissectors/packet-mime-encap.c
@@ -33,18 +33,16 @@ static int proto_mime_encap = -1;
static heur_dissector_list_t heur_subdissector_list;
static dissector_handle_t data_handle;
+static tvbuff_t *file_tvbs;
static tvbuff_t *whole_tvb;
-static tvbuff_t *first_tvb;
static void
mime_encap_init(void)
{
- if (whole_tvb) {
- /* hacky, tvb_free_chain() requires that we'll pass first tvb in chain,
- * and tvb composite chains up with first tvb appended */
- tvb_free_chain(first_tvb);
+ if (file_tvbs) {
+ tvb_free_chain(file_tvbs);
+ file_tvbs = NULL;
whole_tvb = NULL;
- first_tvb = NULL;
}
}
@@ -70,10 +68,11 @@ dissect_mime_encap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if (len) {
tvbuff_t *cloned_tvb = tvb_clone(tvb);
- if (!whole_tvb) {
+ if (!file_tvbs) {
+ file_tvbs = cloned_tvb;
whole_tvb = tvb_new_composite();
- first_tvb = cloned_tvb;
- }
+ } else
+ tvb_add_to_chain(file_tvbs, cloned_tvb);
tvb_composite_append(whole_tvb, cloned_tvb);
} else