Hello community, here is the log from the commit of package clementine for openSUSE:Factory checked in at 2019-06-06 18:16:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/clementine (Old) and /work/SRC/openSUSE:Factory/.clementine.new.4811 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "clementine" Thu Jun 6 18:16:58 2019 rev:50 rq:707792 version:1.3.1+git20190423 Changes: -------- --- /work/SRC/openSUSE:Factory/clementine/clementine.changes 2019-05-24 11:33:00.673375368 +0200 +++ /work/SRC/openSUSE:Factory/.clementine.new.4811/clementine.changes 2019-06-06 18:16:59.732691769 +0200 @@ -1,0 +2,12 @@ +Wed Jun 5 09:27:00 UTC 2019 - Dave Plater <davejpla...@gmail.com> + +- Added patch from git 96a7e18a8d2be8d9f3223a6a6c81fbaac1179869 to + fix various Tag zero value issues: + 0001-Fix-a-number-of-potential-zero-value-field-values.patch + +------------------------------------------------------------------- +Fri May 24 07:05:52 UTC 2019 - plater <davejpla...@gmail.com> + +- Build with -fsanitize=address. + +------------------------------------------------------------------- New: ---- 0001-Fix-a-number-of-potential-zero-value-field-values.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ clementine.spec ++++++ --- /var/tmp/diff_new_pack.gGYvUU/_old 2019-06-06 18:17:00.696691487 +0200 +++ /var/tmp/diff_new_pack.gGYvUU/_new 2019-06-06 18:17:00.696691487 +0200 @@ -62,6 +62,7 @@ Patch17: 0001-Fixes-for-APE-filetype.patch Patch18: 0001-Simplify-some-statements.patch Patch19: 0001-Set-non-zero-minimum-for-fade-times.patch +Patch20: 0001-Fix-a-number-of-potential-zero-value-field-values.patch %if 0%{?suse_version} > 1325 BuildRequires: libboost_headers-devel %else @@ -168,7 +169,7 @@ rm -rvf 3rdparty/SPMediaKeyTap %build -export CFLAGS="%{optflags} -fno-strict-aliasing" +export CFLAGS="%{optflags} -fno-strict-aliasing -fsanitize=address -ggdb" export CXXFLAGS="$CFLAGS" %cmake \ -DBUILD_WERROR=OFF \ ++++++ 0001-Fix-a-number-of-potential-zero-value-field-values.patch ++++++ >From 96a7e18a8d2be8d9f3223a6a6c81fbaac1179869 Mon Sep 17 00:00:00 2001 From: "James D. Smith" <smithj...@gmail.com> Date: Wed, 3 Apr 2019 10:13:57 -0600 Subject: [PATCH] Fix a number of potential zero-value field values. --- ext/libclementine-tagreader/tagreader.cpp | 104 +++++++++++++++--------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/ext/libclementine-tagreader/tagreader.cpp b/ext/libclementine-tagreader/tagreader.cpp index 900f042b4..26f81be75 100644 --- a/ext/libclementine-tagreader/tagreader.cpp +++ b/ext/libclementine-tagreader/tagreader.cpp @@ -692,10 +692,10 @@ void TagReader::SetVorbisComments( vorbis_comments->addField( "DISCNUMBER", QStringToTaglibString( - song.disc() <= 0 - 1 ? QString() : QString::number(song.disc())), + song.disc() <= 0 ? QString() : QString::number(song.disc())), true); vorbis_comments->addField( - "COMPILATION", StdStringToTaglibString(song.compilation() ? "1" : "0"), + "COMPILATION", QStringToTaglibString(song.compilation() ? QString::number(1) : QString()), true); // Try to be coherent, the two forms are used but the first one is preferred @@ -712,19 +712,20 @@ void TagReader::SetVorbisComments( void TagReader::SetFMPSStatisticsVorbisComments( TagLib::Ogg::XiphComment* vorbis_comments, const pb::tagreader::SongMetadata& song) const { - vorbis_comments->addField( - "FMPS_PLAYCOUNT", - QStringToTaglibString(QString::number(song.playcount()))); - vorbis_comments->addField( - "FMPS_RATING_AMAROK_SCORE", - QStringToTaglibString(QString::number(song.score() / 100.0))); + if (song.playcount()) + vorbis_comments->addField( + "FMPS_PLAYCOUNT", TagLib::String::number(song.playcount()), true); + if (song.score()) + vorbis_comments->addField( + "FMPS_RATING_AMAROK_SCORE", QStringToTaglibString( + QString::number(song.score() / 100.0)), true); } void TagReader::SetFMPSRatingVorbisComments( TagLib::Ogg::XiphComment* vorbis_comments, const pb::tagreader::SongMetadata& song) const { vorbis_comments->addField( - "FMPS_RATING", QStringToTaglibString(QString::number(song.rating()))); + "FMPS_RATING", QStringToTaglibString(QString::number(song.rating())), true); } pb::tagreader::SongMetadata_Type TagReader::GuessFileType( @@ -783,20 +784,14 @@ bool TagReader::SaveFile(const QString& filename, fileref->tag()->setAlbum(StdStringToTaglibString(song.album())); fileref->tag()->setGenre(StdStringToTaglibString(song.genre())); fileref->tag()->setComment(StdStringToTaglibString(song.comment())); - fileref->tag()->setYear(song.year()); - fileref->tag()->setTrack(song.track()); + fileref->tag()->setYear(song.year() <= 0 - 1 ? 0: song.year()); + fileref->tag()->setTrack(song.track() <= 0 - 1 ? 0: song.track()); auto saveApeTag = [&](TagLib::APE::Tag* tag) { - tag->setItem( - "disc", - TagLib::APE::Item("disc", TagLib::String::number( - song.disc() <= 0 - 1 ? 0 : song.disc()))); - tag->setItem("bpm", - TagLib::APE::Item( - "bpm", TagLib::StringList( - song.bpm() <= 0 - 1 - ? "0" - : TagLib::String::number(song.bpm())))); + tag->addValue("disc", QStringToTaglibString( + song.disc() <= 0 ? QString() : QString::number(song.disc())), true); + tag->addValue("bpm", QStringToTaglibString( + song.bpm() <= 0 - 1 ? QString() : QString::number(song.bpm())), true); tag->setItem("composer", TagLib::APE::Item( "composer", TagLib::StringList(song.composer().c_str()))); @@ -812,17 +807,14 @@ bool TagReader::SaveFile(const QString& filename, TagLib::StringList(song.albumartist().c_str()))); tag->setItem("lyrics", TagLib::APE::Item("lyrics", TagLib::String(song.lyrics()))); - tag->setItem( - "compilation", - TagLib::APE::Item("compilation", - TagLib::StringList(song.compilation() ? "1" : "0"))); + tag->addValue("compilation", QStringToTaglibString(song.compilation() ? QString::number(1) : QString()), true); }; if (TagLib::MPEG::File* file = dynamic_cast<TagLib::MPEG::File*>(fileref->file())) { TagLib::ID3v2::Tag* tag = file->ID3v2Tag(true); SetTextFrame( - "TPOS", song.disc() <= 0 - 1 ? QString() : QString::number(song.disc()), + "TPOS", song.disc() <= 0 ? QString() : QString::number(song.disc()), tag); SetTextFrame("TBPM", song.bpm() <= 0 - 1 ? QString() : QString::number(song.bpm()), @@ -833,7 +825,7 @@ bool TagReader::SaveFile(const QString& filename, SetUnsyncLyricsFrame(song.lyrics(), tag); // Skip TPE1 (which is the artist) here because we already set it SetTextFrame("TPE2", song.albumartist(), tag); - SetTextFrame("TCMP", std::string(song.compilation() ? "1" : "0"), tag); + SetTextFrame("TCMP", song.compilation() ? QString::number(1) : QString(), tag); } else if (TagLib::FLAC::File* file = dynamic_cast<TagLib::FLAC::File*>(fileref->file())) { TagLib::Ogg::XiphComment* tag = file->xiphComment(); @@ -894,30 +886,33 @@ bool TagReader::SaveSongStatisticsToFile( return false; auto saveApeSongStats = [&](TagLib::APE::Tag* tag) { - tag->setItem( - "FMPS_Rating_Amarok_Score", - TagLib::APE::Item("FMPS_Rating_Amarok_Score", - TagLib::StringList(QStringToTaglibString( - QString::number(song.score() / 100.0))))); - tag->setItem( - "FMPS_PlayCount", - TagLib::APE::Item( - "FMPS_PlayCount", - TagLib::StringList(TagLib::String::number(song.playcount())))); + if (song.score()) + tag->setItem( + "FMPS_Rating_Amarok_Score", + TagLib::APE::Item("FMPS_Rating_Amarok_Score", QStringToTaglibString( + QString::number(song.score() / 100.0)))); + if (song.playcount()) + tag->setItem("FMPS_PlayCount", TagLib::APE::Item( + "FMPS_PlayCount", TagLib::String::number(song.playcount()))); }; if (TagLib::MPEG::File* file = dynamic_cast<TagLib::MPEG::File*>(fileref->file())) { TagLib::ID3v2::Tag* tag = file->ID3v2Tag(true); - // Save as FMPS - SetUserTextFrame("FMPS_PlayCount", QString::number(song.playcount()), tag); - SetUserTextFrame("FMPS_Rating_Amarok_Score", - QString::number(song.score() / 100.0), tag); + if (song.playcount()) { + // Save as FMPS + SetUserTextFrame("FMPS_PlayCount", QString::number( + song.playcount()), tag); - // Also save as POPM - TagLib::ID3v2::PopularimeterFrame* frame = GetPOPMFrameFromTag(tag); - frame->setCounter(song.playcount()); + // Also save as POPM + TagLib::ID3v2::PopularimeterFrame* frame = GetPOPMFrameFromTag(tag); + frame->setCounter(song.playcount()); + } + + if (song.score()) + SetUserTextFrame("FMPS_Rating_Amarok_Score", + QString::number(song.score() / 100.0), tag); } else if (TagLib::FLAC::File* file = dynamic_cast<TagLib::FLAC::File*>(fileref->file())) { @@ -932,18 +927,23 @@ bool TagReader::SaveSongStatisticsToFile( else if (TagLib::ASF::File* file = dynamic_cast<TagLib::ASF::File*>(fileref->file())) { TagLib::ASF::Tag* tag = file->tag(); - tag->addAttribute("FMPS/Playcount", NumberToASFAttribute(song.playcount())); - tag->addAttribute("FMPS/Rating_Amarok_Score", - NumberToASFAttribute(song.score() / 100.0)); + if (song.playcount()) + tag->addAttribute("FMPS/Playcount", NumberToASFAttribute( + song.playcount())); + if (song.score()) + tag->addAttribute("FMPS/Rating_Amarok_Score", + NumberToASFAttribute(song.score() / 100.0)); } #endif else if (TagLib::MP4::File* file = dynamic_cast<TagLib::MP4::File*>(fileref->file())) { TagLib::MP4::Tag* tag = file->tag(); - tag->itemListMap()[kMP4_FMPS_Score_ID] = TagLib::StringList( - QStringToTaglibString(QString::number(song.score() / 100.0))); - tag->itemListMap()[kMP4_FMPS_Playcount_ID] = - TagLib::StringList(TagLib::String::number(song.playcount())); + if (song.score()) + tag->itemListMap()[kMP4_FMPS_Score_ID] = TagLib::MP4::Item( + QStringToTaglibString(QString::number(song.score() / 100.0))); + if (song.playcount()) + tag->itemListMap()[kMP4_FMPS_Playcount_ID] = TagLib::MP4::Item( + TagLib::String::number(song.playcount())); } else if (TagLib::APE::File* file = dynamic_cast<TagLib::APE::File*>(fileref->file())) { saveApeSongStats(file->APETag(true)); @@ -974,7 +974,7 @@ bool TagReader::SaveSongRatingToFile( if (filename.isNull()) return false; qLog(Debug) << "Saving song rating tags to" << filename; - if (song.rating() < 0) { + if (song.rating()) { // The FMPS spec says unrated == "tag not present". For us, no rating // results in rating being -1, so don't write anything in that case. // Actually, we should also remove tag set in this case, but in -- 2.16.4