From 3af05bc9fad288bd8c8ce548ea675cee7db9f890 Mon Sep 17 00:00:00 2001 From: Casper Jeukendrup <48658420+cbjeukendrup@users.noreply.github.com> Date: Sat, 8 Jul 2023 10:53:13 +0200 Subject: [PATCH] Fix crash when creating linked staff for TAB-only staff --- src/engraving/libmscore/staff.cpp | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/engraving/libmscore/staff.cpp b/src/engraving/libmscore/staff.cpp index f6116bb06ebc..f124685b5402 100644 --- a/src/engraving/libmscore/staff.cpp +++ b/src/engraving/libmscore/staff.cpp @@ -963,22 +963,31 @@ bool Staff::isPrimaryStaff() const if (!_links) { return true; } - std::vector s; - std::vector ss; - for (auto e : *_links) { - Staff* staff = toStaff(e); + + std::vector linkedStavesInThisScore; + std::vector linkedNonTabStavesInThisScore; + + for (const EngravingObject* linked : *_links) { + const Staff* staff = toStaff(linked); + if (staff->score() == score()) { - s.push_back(staff); + linkedStavesInThisScore.push_back(staff); + if (!staff->isTabStaff(Fraction(0, 1))) { - ss.push_back(staff); + linkedNonTabStavesInThisScore.push_back(staff); } } } - if (s.size() == 1) { // the linked staves are in different scores - return s.front() == this; - } else { // return a non tab linked staff in this score - return ss.front() == this; + + IF_ASSERT_FAILED(!linkedStavesInThisScore.empty()) { + return true; + } + + if (!linkedNonTabStavesInThisScore.empty()) { + return linkedNonTabStavesInThisScore.front() == this; } + + return linkedStavesInThisScore.front() == this; } //---------------------------------------------------------