(svn r23034) -Fix: make sure the custom playlists are 0 terminated

pull/155/head
rubidium 13 years ago
parent 75414c3bcd
commit c00b74f7ca

@ -79,20 +79,24 @@ static byte * const _playlists[] = {
/** /**
* Validate a playlist. * Validate a playlist.
* @param playlist the playlist to validate * @param playlist The playlist to validate.
* @param last The last location in the list.
*/ */
void ValidatePlaylist(byte *playlist) void ValidatePlaylist(byte *playlist, const byte *last)
{ {
while (*playlist != 0) { while (*playlist != 0 && playlist <= last) {
/* Song indices are saved off-by-one so 0 is "nothing". */ /* Song indices are saved off-by-one so 0 is "nothing". */
if (*playlist <= NUM_SONGS_AVAILABLE && !StrEmpty(GetSongName(*playlist - 1))) { if (*playlist <= NUM_SONGS_AVAILABLE && !StrEmpty(GetSongName(*playlist - 1))) {
playlist++; playlist++;
continue; continue;
} }
for (byte *p = playlist; *p != 0; p++) { for (byte *p = playlist; *p != 0 && p <= last; p++) {
p[0] = p[1]; p[0] = p[1];
} }
} }
/* Make sure the list is null terminated. */
*last = 0;
} }
/** Initialize the playlists */ /** Initialize the playlists */
@ -118,8 +122,8 @@ void InitializeMusic()
_playlists[k + 1][j] = 0; _playlists[k + 1][j] = 0;
} }
ValidatePlaylist(_settings_client.music.custom_1); ValidatePlaylist(_settings_client.music.custom_1, lastof(_settings_client.music.custom_1));
ValidatePlaylist(_settings_client.music.custom_2); ValidatePlaylist(_settings_client.music.custom_2, lastof(_settings_client.music.custom_2));
if (BaseMusic::GetUsedSet()->num_available < _music_wnd_cursong) { if (BaseMusic::GetUsedSet()->num_available < _music_wnd_cursong) {
/* If there are less songs than the currently played song, /* If there are less songs than the currently played song,

Loading…
Cancel
Save