From 2b3718a86c5edf5994d3b969a0b5a7acea97d559 Mon Sep 17 00:00:00 2001 From: Sebastien Ronsse Date: Fri, 17 Jun 2016 13:37:46 +1000 Subject: [PATCH] playlist: Fix memory leak due to unallocated playlist entry strings --- playlist.c | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/playlist.c b/playlist.c index 5c3ba42bad..569bfae1ad 100644 --- a/playlist.c +++ b/playlist.c @@ -182,13 +182,31 @@ void playlist_update(playlist_t *playlist, size_t idx, return; entry = &playlist->entries[idx]; - - entry->path = path ? strdup(path) : entry->path; - entry->label = label ? strdup(label) : entry->label; - entry->core_path = core_path ? strdup(core_path) : entry->core_path; - entry->core_name = core_name ? strdup(core_name) : entry->core_name; - entry->db_name = db_name ? strdup(db_name) : entry->db_name; - entry->crc32 = crc32 ? strdup(crc32) : entry->crc32; + + if (path && (path != entry->path)) { + free(entry->path); + entry->path = strdup(path); + } + if (label && (label != entry->label)) { + free(entry->label); + entry->label = strdup(label); + } + if (core_path && (core_path != entry->core_path)) { + free(entry->core_path); + entry->core_path = strdup(core_path); + } + if (core_name && (core_name != entry->core_name)) { + free(entry->core_name); + entry->core_name = strdup(core_name); + } + if (db_name && (db_name != entry->db_name)) { + free(entry->db_name); + entry->db_name = strdup(db_name); + } + if (crc32 && (crc32 != entry->crc32)) { + free(entry->crc32); + entry->crc32 = strdup(crc32); + } } /**