From d33d684fab86c0e4e438fcc31ee1451c1f137811 Mon Sep 17 00:00:00 2001 From: Tsuda Kageyu Date: Tue, 24 Mar 2015 10:31:52 +0900 Subject: [PATCH] Discard empty ID3v2 frames instead of adding a dummy null byte. --- taglib/mpeg/id3v2/id3v2frame.cpp | 3 --- taglib/mpeg/id3v2/id3v2tag.cpp | 11 +++++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/taglib/mpeg/id3v2/id3v2frame.cpp b/taglib/mpeg/id3v2/id3v2frame.cpp index 85e9f66d..bee5375a 100644 --- a/taglib/mpeg/id3v2/id3v2frame.cpp +++ b/taglib/mpeg/id3v2/id3v2frame.cpp @@ -193,9 +193,6 @@ void Frame::setText(const String &) ByteVector Frame::render() const { ByteVector fieldData = renderFields(); - if(fieldData.isEmpty()) - fieldData = ByteVector("\x00", 1); - d->header->setFrameSize(fieldData.size()); ByteVector headerData = d->header->render(); diff --git a/taglib/mpeg/id3v2/id3v2tag.cpp b/taglib/mpeg/id3v2/id3v2tag.cpp index 267a45d0..33345407 100644 --- a/taglib/mpeg/id3v2/id3v2tag.cpp +++ b/taglib/mpeg/id3v2/id3v2tag.cpp @@ -591,12 +591,19 @@ ByteVector ID3v2::Tag::render(int version) const for(FrameList::ConstIterator it = frameList.begin(); it != frameList.end(); it++) { (*it)->header()->setVersion(version); if((*it)->header()->frameID().size() != 4) { - debug("A frame of unsupported or unknown type \'" + debug("An ID3v2 frame of unsupported or unknown type \'" + String((*it)->header()->frameID()) + "\' has been discarded"); continue; } - if(!(*it)->header()->tagAlterPreservation()) + if(!(*it)->header()->tagAlterPreservation()) { + const ByteVector frameData = (*it)->render(); + if(frameData.size() == Frame::headerSize()) { + debug("An empty ID3v2 frame \'" + + String((*it)->header()->frameID()) + "\' has been discarded"); + continue; + } tagData.append((*it)->render()); + } } // Compute the amount of padding, and append that to tagData.