summaryrefslogtreecommitdiff
path: root/wiretap/wtap.c
diff options
context:
space:
mode:
authorHadriel Kaplan <hadrielk@yahoo.com>2015-08-20 14:38:35 -0400
committerAnders Broman <a.broman58@gmail.com>2015-08-21 04:55:20 +0000
commitfab0e59c70bfd8e39189ac29b17333d85d4645cb (patch)
tree70ebe57fc81481ca1ead1df4067bf547262b4935 /wiretap/wtap.c
parentb4762a043458e5205090282a099184980fb555ea (diff)
downloadwireshark-fab0e59c70bfd8e39189ac29b17333d85d4645cb.tar.gz
Fix memory leaks of dumper SHB and IDB infos
Change-Id: I6b81d3e853d503c6a81f9793957b48ab34c6808c Reviewed-on: https://code.wireshark.org/review/10156 Petri-Dish: Hadriel Kaplan <hadrielk@yahoo.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'wiretap/wtap.c')
-rw-r--r--wiretap/wtap.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/wiretap/wtap.c b/wiretap/wtap.c
index 2837b69852..f984bfce4d 100644
--- a/wiretap/wtap.c
+++ b/wiretap/wtap.c
@@ -263,6 +263,54 @@ wtap_file_get_idb_info(wtap *wth)
return idb_info;
}
+static void
+wtap_free_isb_members(wtapng_if_stats_t *isb)
+{
+ if (isb) {
+ g_free(isb->opt_comment);
+ }
+}
+
+static void
+wtap_free_idb_members(wtapng_if_descr_t* idb)
+{
+ if (idb) {
+ g_free(idb->opt_comment);
+ g_free(idb->if_os);
+ g_free(idb->if_name);
+ g_free(idb->if_description);
+ g_free(idb->if_filter_str);
+ g_free(idb->if_filter_bpf_bytes);
+ if (idb->interface_statistics) {
+ wtapng_if_stats_t *isb;
+ guint i;
+ for (i = 0; i < idb->interface_statistics->len; i++) {
+ isb = &g_array_index(idb->interface_statistics, wtapng_if_stats_t, i);
+ wtap_free_isb_members(isb);
+ }
+ g_array_free(idb->interface_statistics, TRUE);
+ }
+ }
+}
+
+void
+wtap_free_idb_info(wtapng_iface_descriptions_t *idb_info)
+{
+ if (idb_info == NULL)
+ return;
+
+ if (idb_info->interface_data) {
+ guint i;
+ for (i = 0; i < idb_info->interface_data->len; i++) {
+ wtapng_if_descr_t* idb = &g_array_index(idb_info->interface_data, wtapng_if_descr_t, i);
+ wtap_free_idb_members(idb);
+ }
+ g_array_free(idb_info->interface_data, TRUE);
+ }
+
+ g_free(idb_info);
+}
+
gchar *
wtap_get_debug_if_descr(const wtapng_if_descr_t *if_descr,
const int indent,