diff --git a/taglib/flac/flacfile.cpp b/taglib/flac/flacfile.cpp index 7f437194..ada215db 100644 --- a/taglib/flac/flacfile.cpp +++ b/taglib/flac/flacfile.cpp @@ -187,16 +187,24 @@ bool FLAC::File::save() // Replace metadata blocks - for(BlockIterator it = d->blocks.begin(); it != d->blocks.end(); ++it) { + MetadataBlock *commentBlock = + new UnknownMetadataBlock(MetadataBlock::VorbisComment, d->xiphCommentData); + for(BlockIterator it = d->blocks.begin(); it != d->blocks.end();) { if((*it)->code() == MetadataBlock::VorbisComment) { - // Set the new Vorbis Comment block + // Remove the old Vorbis Comment block delete *it; - d->blocks.erase(it); - break; + it = d->blocks.erase(it); + continue; } + if(commentBlock && (*it)->code() == MetadataBlock::Picture) { + // Set the new Vorbis Comment block before the first picture block + d->blocks.insert(it, commentBlock); + commentBlock = 0; + } + ++it; } - - d->blocks.append(new UnknownMetadataBlock(MetadataBlock::VorbisComment, d->xiphCommentData)); + if(commentBlock) + d->blocks.append(commentBlock); // Render data for the metadata blocks