From 1ecee037c7c66a0acbec38d37bf4a41e4b3d7283 Mon Sep 17 00:00:00 2001 From: Pasi Saarinen Date: Mon, 6 Oct 2014 15:40:10 +0200 Subject: [PATCH] Fix moodbar segfault when playing broken mp3 When playing a broken mp3 (eg empty file) clementine crashed if moodbar was enabled. --- src/moodbar/moodbarbuilder.cpp | 10 ++++++---- src/moodbar/moodbarpipeline.cpp | 6 ++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/moodbar/moodbarbuilder.cpp b/src/moodbar/moodbarbuilder.cpp index f19386e42..30fa9962d 100644 --- a/src/moodbar/moodbarbuilder.cpp +++ b/src/moodbar/moodbarbuilder.cpp @@ -158,13 +158,15 @@ void MoodbarBuilder::Normalize(QList* vals, double Rgb::*member) { } QByteArray MoodbarBuilder::Finish(int width) { - Normalize(&frames_, &Rgb::r); - Normalize(&frames_, &Rgb::g); - Normalize(&frames_, &Rgb::b); - QByteArray ret; ret.resize(width * 3); char* data = ret.data(); + if (frames_.count() == 0) + return ret; + + Normalize(&frames_, &Rgb::r); + Normalize(&frames_, &Rgb::g); + Normalize(&frames_, &Rgb::b); for (int i = 0; i < width; ++i) { Rgb rgb; diff --git a/src/moodbar/moodbarpipeline.cpp b/src/moodbar/moodbarpipeline.cpp index 9f3bee927..92cf1a8e5 100644 --- a/src/moodbar/moodbarpipeline.cpp +++ b/src/moodbar/moodbarpipeline.cpp @@ -181,8 +181,10 @@ GstBusSyncReply MoodbarPipeline::BusCallbackSync(GstBus*, GstMessage* msg, void MoodbarPipeline::Stop(bool success) { success_ = success; - data_ = builder_->Finish(1000); - builder_.reset(); + if (builder_ != nullptr) { + data_ = builder_->Finish(1000); + builder_.reset(); + } emit Finished(success); }