From cdef208272294b567ec80b9defd60e57a0eb2587 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Thu, 13 Sep 2007 21:55:46 +0200 Subject: [PATCH] Fix com_add segfault. We call free(obj.data) unconditionally on errors, but is is not set to NULL. Also, return always success in add_one_audio_file() in order to continue the loop. --- aft.c | 4 ++-- vss.c | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/aft.c b/aft.c index 82724c3d..8473bc9b 100644 --- a/aft.c +++ b/aft.c @@ -1402,7 +1402,7 @@ static int add_one_audio_file(const char *arg, const void *private_data) const struct private_add_data *pad = private_data; struct audio_format_info afhi, *afhi_ptr = NULL; struct osl_row *pb = NULL, *hs = NULL; /* path brother/hash sister */ - struct osl_object map, obj, query, result; + struct osl_object map, obj = {.data = NULL}, query, result; char *path; HASH_TYPE hash[HASH_SIZE]; @@ -1477,7 +1477,7 @@ out_free: free(path); if (afhi_ptr) free(afhi_ptr->chunk_table); - return ret; + return 1; /* it's not an error if not all files could be added */ } int com_add(int fd, int argc, char * const * const argv) diff --git a/vss.c b/vss.c index a6d3dfc0..2de7a30c 100644 --- a/vss.c +++ b/vss.c @@ -278,6 +278,7 @@ int compute_afhi(const char *path, char *data, size_t size, ret = afl[i].get_file_info(data, size, afhi); if (ret >= 0) return i; + PARA_WARNING_LOG("%s\n", PARA_STRERROR(-ret)); } return -E_AUDIO_FORMAT; } -- 2.30.2