changeset 18205:1e8e952310ab draft

(svn r23034) -Fix: make sure the custom playlists are 0 terminated
author rubidium <rubidium@openttd.org>
date Sun, 16 Oct 2011 19:56:47 +0000
parents 157bc2e2853d
children 35eca0767c53
files src/music_gui.cpp
diffstat 1 files changed, 10 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/music_gui.cpp
+++ b/src/music_gui.cpp
@@ -79,20 +79,24 @@
 
 /**
  * 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". */
 		if (*playlist <= NUM_SONGS_AVAILABLE && !StrEmpty(GetSongName(*playlist - 1))) {
 			playlist++;
 			continue;
 		}
-		for (byte *p = playlist; *p != 0; p++) {
+		for (byte *p = playlist; *p != 0 && p <= last; p++) {
 			p[0] = p[1];
 		}
 	}
+
+	/* Make sure the list is null terminated. */
+	*last = 0;
 }
 
 /** Initialize the playlists */
@@ -118,8 +122,8 @@
 		_playlists[k + 1][j] = 0;
 	}
 
-	ValidatePlaylist(_settings_client.music.custom_1);
-	ValidatePlaylist(_settings_client.music.custom_2);
+	ValidatePlaylist(_settings_client.music.custom_1, lastof(_settings_client.music.custom_1));
+	ValidatePlaylist(_settings_client.music.custom_2, lastof(_settings_client.music.custom_2));
 
 	if (BaseMusic::GetUsedSet()->num_available < _music_wnd_cursong) {
 		/* If there are less songs than the currently played song,