aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-06-14 04:16:21 +0000
committerEric Wong <normalperson@yhbt.net>2008-06-14 04:16:21 +0000
commit2e4c199274c67f729299a4b494a7614f23f4b084 (patch)
tree941444567b970c94438f92a60b9ee2dd0c576097
parent0c2b12f0985632f5d93e1053708d23290baef698 (diff)
downloadmpd-2e4c199274c67f729299a4b494a7614f23f4b084.tar.gz
mpd-2e4c199274c67f729299a4b494a7614f23f4b084.tar.xz
mpd-2e4c199274c67f729299a4b494a7614f23f4b084.zip
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
-rw-r--r--src/song.c9
1 files changed, 5 insertions, 4 deletions
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);
}