From ac16425a1f08909fa9a21347cc674e192ab22781 Mon Sep 17 00:00:00 2001 From: Jakub Zawadzki Date: Tue, 23 Jul 2013 17:31:39 +0000 Subject: Free all cloned tvbs, not only first one. svn path=/trunk/; revision=50844 --- epan/dissectors/packet-mime-encap.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'epan/dissectors/packet-mime-encap.c') 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 -- cgit v1.2.3