From 7820ebb82ea66619ae72caf3bdeb7fd16d035fdd Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sun, 25 Jul 2010 12:01:29 +0200 Subject: directory_save: duplicate the playlist name The function playlist_metadata_load() will overwrite the input buffer before using the "name" parameter; since "name" points to the same buffer, we'll get a corrupted string. --- src/directory_save.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/directory_save.c') diff --git a/src/directory_save.c b/src/directory_save.c index af134d9a..55896c28 100644 --- a/src/directory_save.c +++ b/src/directory_save.c @@ -172,11 +172,18 @@ directory_load(FILE *fp, struct directory *directory, songvec_add(&directory->songs, song); } else if (g_str_has_prefix(line, PLAYLIST_META_BEGIN)) { - const char *name = line + sizeof(PLAYLIST_META_BEGIN) - 1; + /* duplicate the name, because + playlist_metadata_load() will overwrite the + buffer */ + char *name = g_strdup(line + sizeof(PLAYLIST_META_BEGIN) - 1); if (!playlist_metadata_load(fp, &directory->playlists, - name, buffer, error)) + name, buffer, error)) { + g_free(name); return false; + } + + g_free(name); } else { g_set_error(error, directory_quark(), 0, "Malformed line: %s", line); -- cgit v1.2.3