From 2e4c199274c67f729299a4b494a7614f23f4b084 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 14 Jun 2008 04:16:21 +0000 Subject: fix segmentation fault in song info parser The database parser does not check whether the song object has been initialized yet, which may lead to a NULL pointer dereference. Add this check. git-svn-id: https://svn.musicpd.org/mpd/branches/branch-0.13.0-fixes@7379 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/song.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/song.c b/src/song.c index 9bcb1a0b4..522d1f228 100644 --- a/src/song.c +++ b/src/song.c @@ -250,9 +250,11 @@ void readSongInfoIntoList(FILE * fp, SongList * list, Directory * parentDir) song->url = xstrdup(buffer + strlen(SONG_KEY)); song->type = SONG_TYPE_FILE; song->parentDir = parentDir; + } else if (*buffer == 0) { + /* ignore empty lines (starting with '\0') */ + } else if (song == NULL) { + FATAL("Problems reading song info\n"); } else if (0 == strncmp(SONG_FILE, buffer, strlen(SONG_FILE))) { - if (!song) - FATAL("Problems reading song info\n"); /* we don't need this info anymore song->url = xstrdup(&(buffer[strlen(SONG_FILE)])); */ @@ -270,8 +272,7 @@ void readSongInfoIntoList(FILE * fp, SongList * list, Directory * parentDir) } else if (0 == strncmp(SONG_MTIME, buffer, strlen(SONG_MTIME))) { song->mtime = atoi(&(buffer[strlen(SONG_MTIME)])); } - /* ignore empty lines (starting with '\0') */ - else if (*buffer) + else FATAL("songinfo: unknown line in db: %s\n", buffer); } -- cgit v1.2.3