From 87357af97428663aa68f61a133f3afcd95ebade8 Mon Sep 17 00:00:00 2001 From: Martchus Date: Sun, 9 May 2021 12:15:57 +0200 Subject: [PATCH] Fix handling empty ID3v2 record date fields to avoid year "0001" in this case --- id3/id3v2tag.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/id3/id3v2tag.cpp b/id3/id3v2tag.cpp index a93f0ee..1d63d07 100644 --- a/id3/id3v2tag.cpp +++ b/id3/id3v2tag.cpp @@ -362,8 +362,10 @@ void Id3v2Tag::convertOldRecordDateFields(const std::string &diagContext, Diagno } // parse values of lYear/lRecordingDates/lDate/lTime/sYear/sRecordingDates/sDate/sTime fields + bool hasAnyValue = false; int year = 1, month = 1, day = 1, hour = 0, minute = 0; if (const auto &v = value(Id3v2FrameIds::lYear)) { + hasAnyValue = true; try { year = v.toInteger(); } catch (const ConversionException &e) { @@ -371,6 +373,7 @@ void Id3v2Tag::convertOldRecordDateFields(const std::string &diagContext, Diagno } } if (const auto &v = value(Id3v2FrameIds::lDate)) { + hasAnyValue = true; try { auto str = v.toString(); if (str.size() != 4) { @@ -383,6 +386,7 @@ void Id3v2Tag::convertOldRecordDateFields(const std::string &diagContext, Diagno } } if (const auto &v = value(Id3v2FrameIds::lTime)) { + hasAnyValue = true; try { auto str = v.toString(); if (str.size() != 4) { @@ -396,6 +400,9 @@ void Id3v2Tag::convertOldRecordDateFields(const std::string &diagContext, Diagno } // set the field values as DateTime + if (!hasAnyValue) { + return; + } try { setValue(Id3v2FrameIds::lRecordingTime, TagValue(DateTime::fromDateAndTime(year, month, day, hour, minute))); } catch (const ConversionException &e) {