aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWarren Dukes <warren.dukes@gmail.com>2004-06-06 20:34:00 +0000
committerWarren Dukes <warren.dukes@gmail.com>2004-06-06 20:34:00 +0000
commit81720da06dbcaa156bab5d3283df0faaa0334b63 (patch)
tree17b7316462528c5f4c903b8179053d3f792990bc
parentb29f73c819ff8445b71963d883364e315b7a12d8 (diff)
downloadmpd-81720da06dbcaa156bab5d3283df0faaa0334b63.tar.gz
mpd-81720da06dbcaa156bab5d3283df0faaa0334b63.tar.xz
mpd-81720da06dbcaa156bab5d3283df0faaa0334b63.zip
slightly safer copying of metadataChunk to MpdTag
git-svn-id: https://svn.musicpd.org/mpd/trunk@1359 09075e82-0dd4-0310-85a5-a0d7c8717e4f
-rw-r--r--src/metadataChunk.c16
-rw-r--r--src/player.c10
-rw-r--r--src/playlist.c4
3 files changed, 17 insertions, 13 deletions
diff --git a/src/metadataChunk.c b/src/metadataChunk.c
index 1deab3d90..9a4c35e10 100644
--- a/src/metadataChunk.c
+++ b/src/metadataChunk.c
@@ -11,13 +11,21 @@ void initMetadataChunk(MetadataChunk * chunk) {
chunk->title = -1;
}
+#define dupElementToTag(string, element) { \
+ if(element >= 0 && element < METADATA_BUFFER_LENGTH) { \
+ string = strdup(chunk->buffer+element); \
+ } \
+}
+
MpdTag * metadataChunkToMpdTagDup(MetadataChunk * chunk) {
MpdTag * ret = newMpdTag();
- if(chunk->name >= 0) ret->name = strdup(chunk->buffer+chunk->name);
- if(chunk->artist >= 0) ret->artist = strdup(chunk->buffer+chunk->artist);
- if(chunk->album >= 0) ret->album = strdup(chunk->buffer+chunk->album);
- if(chunk->title >= 0) ret->title = strdup(chunk->buffer+chunk->title);
+ chunk->buffer[METADATA_BUFFER_LENGTH] = '\0';
+
+ dupElementToTag(ret->name, chunk->name);
+ dupElementToTag(ret->title, chunk->title);
+ dupElementToTag(ret->artist, chunk->artist);
+ dupElementToTag(ret->album, chunk->album);
return ret;
}
diff --git a/src/player.c b/src/player.c
index e6da9aeb9..3ddd21062 100644
--- a/src/player.c
+++ b/src/player.c
@@ -478,16 +478,16 @@ Song * playerCurrentDecodeSong() {
sizeof(MetadataChunk)))))
{
printf("metadata in the PLAYER!\n");
+ if(prev) free(prev);
+ prev = malloc(sizeof(MetadataChunk));
+ memcpy(prev, &(pc->metadataChunk), sizeof(MetadataChunk));
+ resetPlayerMetadata();
if(song) freeJustSong(song);
song = newNullSong();
if(song->utf8url) free(song->utf8url);
song->utf8url = strdup(pc->currentUrl);
- song->tag = metadataChunkToMpdTagDup(&(pc->metadataChunk));
+ song->tag = metadataChunkToMpdTagDup(prev);
validateUtf8Tag(song->tag);
- if(prev) free(prev);
- prev = malloc(sizeof(MetadataChunk));
- memcpy(prev, &(pc->metadataChunk), sizeof(MetadataChunk));
- resetPlayerMetadata();
return song;
}
diff --git a/src/playlist.c b/src/playlist.c
index 4b6fa5205..dd261cfd2 100644
--- a/src/playlist.c
+++ b/src/playlist.c
@@ -802,19 +802,15 @@ void syncCurrentPlayerDecodeMetadata() {
songNum = playlist.order[playlist.current];
song = playlist.songs[songNum];
- printf("HERE 1\n");
-
if(song->type == SONG_TYPE_URL &&
0 == strcmp(song->utf8url, songPlayer->utf8url) &&
!mpdTagsAreEqual(song->tag, songPlayer->tag))
{
- printf("HERE 1-1\n");
if(song->tag) freeMpdTag(song->tag);
song->tag = mpdTagDup(songPlayer->tag);
playlist.songMod[songNum] = playlist.version;
incrPlaylistVersion();
}
- printf("HERE 2\n");
}
void syncPlayerAndPlaylist() {