forked from osmocom/wireshark
wiretap: fix memory leak of interface_data for wtap_dumper
Mirrors the behavior of wtap_close. Change-Id: I1a04878fdd0409fa74931737332f9b8a1ae77fb1 Reviewed-on: https://code.wireshark.org/review/17620 Reviewed-by: Peter Wu <peter@lekensteyn.nl>
This commit is contained in:
parent
d6f91a7ca4
commit
ba2a3b3626
|
@ -2204,7 +2204,8 @@ wtap_dump_init_dumper(int file_type_subtype, int encap, int snaplen, gboolean co
|
||||||
if ((idb_inf != NULL) && (idb_inf->interface_data->len > 0)) {
|
if ((idb_inf != NULL) && (idb_inf->interface_data->len > 0)) {
|
||||||
guint itf_count;
|
guint itf_count;
|
||||||
|
|
||||||
/* XXX: what free's this stuff? */
|
/* Note: this memory is owned by wtap_dumper and will become
|
||||||
|
* invalid after wtap_dump_close. */
|
||||||
wdh->interface_data = g_array_new(FALSE, FALSE, sizeof(wtap_block_t));
|
wdh->interface_data = g_array_new(FALSE, FALSE, sizeof(wtap_block_t));
|
||||||
for (itf_count = 0; itf_count < idb_inf->interface_data->len; itf_count++) {
|
for (itf_count = 0; itf_count < idb_inf->interface_data->len; itf_count++) {
|
||||||
file_int_data = g_array_index(idb_inf->interface_data, wtap_block_t, itf_count);
|
file_int_data = g_array_index(idb_inf->interface_data, wtap_block_t, itf_count);
|
||||||
|
@ -2574,6 +2575,7 @@ wtap_dump_close(wtap_dumper *wdh, int *err)
|
||||||
}
|
}
|
||||||
if (wdh->priv != NULL)
|
if (wdh->priv != NULL)
|
||||||
g_free(wdh->priv);
|
g_free(wdh->priv);
|
||||||
|
wtap_block_array_free(wdh->interface_data);
|
||||||
g_free(wdh);
|
g_free(wdh);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1713,9 +1713,11 @@ void wtap_fdclose(wtap *wth);
|
||||||
WS_DLL_PUBLIC
|
WS_DLL_PUBLIC
|
||||||
gboolean wtap_fdreopen(wtap *wth, const char *filename, int *err);
|
gboolean wtap_fdreopen(wtap *wth, const char *filename, int *err);
|
||||||
|
|
||||||
/*** close the current file ***/
|
/** Close only the sequential side, freeing up memory it uses. */
|
||||||
WS_DLL_PUBLIC
|
WS_DLL_PUBLIC
|
||||||
void wtap_sequential_close(wtap *wth);
|
void wtap_sequential_close(wtap *wth);
|
||||||
|
|
||||||
|
/** Closes any open file handles and frees the memory associated with wth. */
|
||||||
WS_DLL_PUBLIC
|
WS_DLL_PUBLIC
|
||||||
void wtap_close(wtap *wth);
|
void wtap_close(wtap *wth);
|
||||||
|
|
||||||
|
@ -1874,8 +1876,13 @@ void wtap_set_bytes_dumped(wtap_dumper *wdh, gint64 bytes_dumped);
|
||||||
struct addrinfo;
|
struct addrinfo;
|
||||||
WS_DLL_PUBLIC
|
WS_DLL_PUBLIC
|
||||||
gboolean wtap_dump_set_addrinfo_list(wtap_dumper *wdh, addrinfo_lists_t *addrinfo_lists);
|
gboolean wtap_dump_set_addrinfo_list(wtap_dumper *wdh, addrinfo_lists_t *addrinfo_lists);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes open file handles and frees memory associated with wdh. Note that
|
||||||
|
* shb_hdr, idb_inf and nrb_hdr are not freed by this routine.
|
||||||
|
*/
|
||||||
WS_DLL_PUBLIC
|
WS_DLL_PUBLIC
|
||||||
gboolean wtap_dump_close(wtap_dumper *, int *);
|
gboolean wtap_dump_close(wtap_dumper *wdh, int *err);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return TRUE if we can write a file out with the given GArray of file
|
* Return TRUE if we can write a file out with the given GArray of file
|
||||||
|
|
Loading…
Reference in New Issue