aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2018-01-22 20:09:46 +0100
committerAnders Broman <a.broman58@gmail.com>2018-01-30 05:51:59 +0000
commit7207c82464a225a1d167c397dcef1232b0224467 (patch)
tree6d98900ab41ec487b49a6989843cf38c18d814a6 /wiretap
parentc9d98323f62d3fd1a1a3ee598c991a03a1fdb3af (diff)
wiretap/merge.c: Fix memory leak, fix description.
If merge_open_in_files() is going to fail, free files array to avoid memleak. Found by clang. Change-Id: I156c5f1c041cd7779ff0a0095bc2810f50768ab6 Reviewed-on: https://code.wireshark.org/review/25421 Petri-Dish: Jakub Zawadzki <darkjames-ws@darkjames.pl> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'wiretap')
-rw-r--r--wiretap/merge.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/wiretap/merge.c b/wiretap/merge.c
index 7c89039d1a..7b42ff9140 100644
--- a/wiretap/merge.c
+++ b/wiretap/merge.c
@@ -99,9 +99,9 @@ add_idb_index_map(merge_in_file_t *in_file, const guint orig_index, const guint
/** Open a number of input files to merge.
*
- * @param in_file_count number of entries in in_file_names and in_files
+ * @param in_file_count number of entries in in_file_names
* @param in_file_names filenames of the input files
- * @param in_files input file array to be filled (>= sizeof(merge_in_file_t) * in_file_count)
+ * @param out_files output pointer with filled file array, or NULL
* @param err wiretap error, if failed
* @param err_info wiretap error string, if failed
* @param err_fileno file on which open failed, if failed
@@ -109,7 +109,7 @@ add_idb_index_map(merge_in_file_t *in_file, const guint orig_index, const guint
*/
static gboolean
merge_open_in_files(guint in_file_count, const char *const *in_file_names,
- merge_in_file_t **in_files, merge_progress_callback_t* cb,
+ merge_in_file_t **out_files, merge_progress_callback_t* cb,
int *err, gchar **err_info, guint *err_fileno)
{
guint i;
@@ -119,7 +119,7 @@ merge_open_in_files(guint in_file_count, const char *const *in_file_names,
gint64 size;
files = (merge_in_file_t *)g_malloc0(files_size);
- *in_files = files;
+ *out_files = NULL;
for (i = 0; i < in_file_count; i++) {
files[i].filename = in_file_names[i];
@@ -132,6 +132,7 @@ merge_open_in_files(guint in_file_count, const char *const *in_file_names,
/* Close the files we've already opened. */
for (j = 0; j < i; j++)
cleanup_in_file(&files[j]);
+ g_free(files);
*err_fileno = i;
return FALSE;
}
@@ -139,6 +140,7 @@ merge_open_in_files(guint in_file_count, const char *const *in_file_names,
if (size == -1) {
for (j = 0; j != G_MAXUINT && j <= i; j++)
cleanup_in_file(&files[j]);
+ g_free(files);
*err_fileno = i;
return FALSE;
}
@@ -149,6 +151,7 @@ merge_open_in_files(guint in_file_count, const char *const *in_file_names,
if (cb)
cb->callback_func(MERGE_EVENT_INPUT_FILES_OPENED, 0, files, in_file_count, cb->data);
+ *out_files = files;
return TRUE;
}