From c272ec315b6fd44650851b1b60e0e55650c6dc25 Mon Sep 17 00:00:00 2001 From: Martchus Date: Wed, 28 Dec 2016 00:17:26 +0100 Subject: [PATCH] Fix setting encoding in TagValue::assignText() * when no conversion should to be done * also be more tolerant in TagValue::toString() when no encoding has been specified --- mp4/mp4tagfield.cpp | 2 +- tagvalue.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mp4/mp4tagfield.cpp b/mp4/mp4tagfield.cpp index b0ede01..3be46c9 100644 --- a/mp4/mp4tagfield.cpp +++ b/mp4/mp4tagfield.cpp @@ -107,7 +107,7 @@ void Mp4TagField::reparse(Mp4Atom &ilstChild) if(find(expectedRawDataTypes.cbegin(), expectedRawDataTypes.cend(), m_parsedRawDataType) == expectedRawDataTypes.cend()) { addNotification(NotificationType::Warning, "Unexpected data type indicator found.", context); } - } catch(Failure &) { + } catch(const Failure &) { // tag id is unknown, it is not possible to validate parsed data type } m_countryIndicator = reader.readUInt16BE(); diff --git a/tagvalue.cpp b/tagvalue.cpp index 4dc6350..fea4da7 100644 --- a/tagvalue.cpp +++ b/tagvalue.cpp @@ -401,7 +401,7 @@ void TagValue::toString(string &result, TagTextEncoding encoding) const if(!isEmpty()) { switch(m_type) { case TagDataType::Text: - if(encoding == TagTextEncoding::Unspecified || encoding == dataEncoding()) { + if(encoding == TagTextEncoding::Unspecified || dataEncoding() == TagTextEncoding::Unspecified || encoding == dataEncoding()) { result.assign(m_ptr.get(), m_size); } else { StringData encodedData; @@ -548,7 +548,7 @@ void TagValue::toWString(std::u16string &result, TagTextEncoding encoding) const void TagValue::assignText(const char *text, std::size_t textSize, TagTextEncoding textEncoding, TagTextEncoding convertTo) { m_type = TagDataType::Text; - m_encoding = convertTo; + m_encoding = convertTo == TagTextEncoding::Unspecified ? textEncoding : convertTo; if(textSize) { if(convertTo == TagTextEncoding::Unspecified || textEncoding == convertTo) { m_ptr = make_unique(m_size = textSize);