From d0201e5aaf91e8248e8edace69684b8539cf1768 Mon Sep 17 00:00:00 2001 From: Joachim Schmitz Date: Wed, 18 Sep 2024 12:17:39 +0200 Subject: [PATCH] Fix #368929: Crash on playback with hidden staves and 'superfluous' voltas --- libmscore/measurebase.cpp | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/libmscore/measurebase.cpp b/libmscore/measurebase.cpp index 8108c2735a1e2..f4f3b8808510f 100644 --- a/libmscore/measurebase.cpp +++ b/libmscore/measurebase.cpp @@ -10,19 +10,18 @@ // the file LICENCE.GPL //============================================================================= -#include "measurebase.h" +#include "layoutbreak.h" #include "measure.h" +#include "measurebase.h" +#include "note.h" #include "staff.h" #include "score.h" -#include "chord.h" -#include "note.h" -#include "layoutbreak.h" -#include "image.h" #include "segment.h" +#include "staff.h" +#include "stafftypechange.h" +#include "system.h" #include "tempo.h" #include "xml.h" -#include "system.h" -#include "stafftypechange.h" namespace Ms { @@ -202,13 +201,13 @@ void MeasureBase::remove(Element* el) Measure* MeasureBase::nextMeasure() const { - MeasureBase* m = _next; - for (;;) { - if (m == 0 || m->isMeasure()) - break; - m = m->_next; + MeasureBase* m = this ? next() : nullptr; + while (m) { + if (m->isMeasure()) + return toMeasure(m); + m = m->next(); } - return toMeasure(m); + return nullptr; } //--------------------------------------------------------- @@ -229,13 +228,13 @@ Measure* MeasureBase::nextMeasureMM() const Measure* MeasureBase::prevMeasure() const { - MeasureBase* m = prev(); + MeasureBase* m = this ? prev() : nullptr; while (m) { if (m->isMeasure()) return toMeasure(m); m = m->prev(); } - return 0; + return nullptr; } //--------------------------------------------------------- @@ -329,7 +328,7 @@ void MeasureBase::layout() MeasureBase* MeasureBase::top() const { const MeasureBase* mb = this; - while (mb->parent()) { + while (mb && mb->parent()) { if (mb->parent()->isMeasureBase()) mb = toMeasureBase(mb->parent()); else