From 341c7bbfd09045c2b91056664ff168b8fca691d8 Mon Sep 17 00:00:00 2001 From: Martchus Date: Thu, 12 Jul 2018 12:33:54 +0200 Subject: [PATCH] Fix setting ID in Id3v2Tag::internallySetValues() for new fields --- id3/id3v2tag.cpp | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/id3/id3v2tag.cpp b/id3/id3v2tag.cpp index 96eaedc..f42ff23 100644 --- a/id3/id3v2tag.cpp +++ b/id3/id3v2tag.cpp @@ -57,23 +57,28 @@ bool Id3v2Tag::internallySetValues(const IdentifierType &id, const std::vectorsecond.setValue(*valuesIterator); + ++valuesIterator; + } else { + frameIterator->second.value().clearDataAndMetadata(); + } } else { - frameIterator = fields().insert(make_pair(id, Id3v2Frame())); + // skip if there is no existing frame but also no values to be assigned + if (valuesIterator == values.cend()) { + return true; + } + // add primary value to new frame + frameIterator = fields().insert(make_pair(id, Id3v2Frame(id, *valuesIterator))); + ++valuesIterator; } - // add primary value to frame - auto &frame(frameIterator->second); - auto valuesIterator = values.cbegin(); - if (valuesIterator != values.cend()) { - frame.setValue(*valuesIterator); - ++valuesIterator; - } else { - frame.value().clearDataAndMetadata(); - } // add additional values to frame - frame.additionalValues() = vector(valuesIterator, values.cend()); + frameIterator->second.additionalValues() = vector(valuesIterator, values.cend()); // remove remaining existing values (there are more existing values than specified ones) for (; range.first != range.second; ++range.first) {