diff options
author | Max Kellermann <max@duempel.org> | 2008-06-14 04:16:21 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2008-06-14 04:16:21 +0000 |
commit | 2e4c199274c67f729299a4b494a7614f23f4b084 (patch) | |
tree | 941444567b970c94438f92a60b9ee2dd0c576097 | |
parent | 0c2b12f0985632f5d93e1053708d23290baef698 (diff) | |
download | mpd-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
Diffstat (limited to '')
-rw-r--r-- | src/song.c | 9 |
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); } |