diff options
author | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2013-07-23 17:31:39 +0000 |
---|---|---|
committer | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2013-07-23 17:31:39 +0000 |
commit | ac16425a1f08909fa9a21347cc674e192ab22781 (patch) | |
tree | 8e381e6d723a1b73284f3f392b914f7f10f01cbf | |
parent | 761b763eaea8802313c0ad414c68509e29c901e8 (diff) |
Free all cloned tvbs, not only first one.
svn path=/trunk/; revision=50844
-rw-r--r-- | epan/dissectors/packet-mime-encap.c | 17 |
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 |