musescore / musescore/MuseScore
"Voices visible in score" can corrupt measures or even EIDs
@zacjansheski is already working on this.
Since Aug 9, 2025.
- Dominant language
- C++
- Stars
- 15.1k
- Forks
- 3.3k
- Avg merge
- 2d 2h
- Merged PRs (30d)
- 91
Description
Issue type
Crash or freeze
Description with steps to reproduce
- Create a score
- Add notes in voice 1
- Select note that's not on first beat
- While in note input mode, press Cmd+Alt+2 to go into second voice, and press a note name
- Open part score
- Optional: Save, close, reopen -> without this step, you get a corruption at the next step, after which you can't continue.
- In Layout panel, expand instrument, click settings icon
- Uncheck voice 1 visibility
- Save, close, reopen -> crash, because the EIDs in the score are corrupted
Supporting files, videos and screenshots
https://github.com/user-attachments/assets/5f48646c-8dbb-44cf-ab65-3344f58ed8de
In the video you only see the main window, so you have to imagine the popup windows
Stack trace
Thread 0 Crashed:: main
0 mscore 0x1049fed4c mu::engraving::EngravingObject::linkTo(mu::engraving::EngravingObject*) + 20
1 mscore 0x104d4d3e8 mu::engraving::read460::TRead::readItemLink(mu::engraving::EngravingItem*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&) + 540
2 mscore 0x104d4ceb8 mu::engraving::read460::TRead::readItemProperties(mu::engraving::EngravingItem*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&) + 664
3 mscore 0x104d53b10 mu::engraving::read460::TRead::readProperties(mu::engraving::ChordRest*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&) + 976
4 mscore 0x104d46f90 mu::engraving::read460::TRead::read(mu::engraving::Rest*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&) + 232
5 mscore 0x104d381e4 mu::engraving::read460::MeasureRead::readVoice(mu::engraving::Measure*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&, int, bool) + 6332
6 mscore 0x104d36120 mu::engraving::read460::MeasureRead::readMeasure(mu::engraving::Measure*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&, int) + 2012
7 mscore 0x104d3413c mu::engraving::read460::StaffRead::readStaff(mu::engraving::Score*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&) + 2188
8 mscore 0x104d2b240 mu::engraving::read460::Read460::readScore410(mu::engraving::Score*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&) + 832
9 mscore 0x104d2ad48 mu::engraving::read460::Read460::readScore(mu::engraving::Score*, mu::engraving::XmlReader&, mu::engraving::rw::ReadInOutData*) + 596
10 mscore 0x104c5a338 mu::engraving::MscLoader::loadMscz(mu::engraving::MasterScore*, mu::engraving::MscReader const&, mu::engraving::SettingsCompat&, bool, mu::engraving::rw::ReadInOutData*) + 2816
11 mscore 0x1048f35a8 mu::engraving::EngravingProject::loadMscz(mu::engraving::MscReader const&, mu::engraving::SettingsCompat&, bool) + 156
12 mscore 0x105582e88 mu::project::NotationProject::doLoad(muse::io::path_t const&, muse::io::path_t const&, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&) + 1072
13 mscore 0x10558151c mu::project::NotationProject::load(muse::io::path_t const&, muse::io::path_t const&, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&) + 764
14 mscore 0x10559d498 mu::project::ProjectActionsController::loadWithFallback(std::__1::shared_ptr<mu::project::INotationProject> const&, muse::io::path_t const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&) + 104
15 mscore 0x10559d19c mu::project::ProjectActionsController::loadProject(muse::io::path_t const&) + 560
16 mscore 0x10559cb3c mu::project::ProjectActionsController::doOpenProject(muse::io::path_t const&) + 124
17 mscore 0x10559ae90 mu::project::ProjectActionsController::openProject(muse::io::path_t const&, QString const&) + 696
18 mscore 0x1055999a8 mu::project::ProjectActionsController::openProject(mu::project::ProjectFile const&) + 492
19 mscore 0x105597d38 mu::project::ProjectActionsController::openProject(muse::actions::ActionData const&) + 252
20 mscore 0x10455fa30 muse::actions::ActionsDispatcher::doDispatch(std::__1::map<muse::actions::Actionable*, std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::function<void (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, muse::actions::ActionData const&)>, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const, std::__1::function<void (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, muse::actions::ActionData const&)>>>>, std::__1::less<muse::actions::Actionable*>, std::__1::allocator<std::__1::pair<muse::actions::Actionable* const, std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>, std::__1::function<void (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, muse::actions::ActionData const&)>, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>>, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const, std::__1::function<void (std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, muse::actions::ActionData const&)>>>>>>> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, muse::actions::ActionData const&) + 728
21 mscore 0x10455f6a0 muse::actions::ActionsDispatcher::dispatch(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, muse::actions::ActionData const&) + 780
22 mscore 0x10555c5dc mu::project::ScoresPageModel::openScore(QString const&, QString const&) + 148
23 mscore 0x105578538 mu::project::ScoresPageModel::qt_metacall(QMetaObject::Call, int, void**) + 188
24 QtQml 0x109ecb720 QV4::CallMethod(QQmlObjectOrGadget const&, int, QMetaType, int, QMetaType const*, QV4::ExecutionEngine*, QV4::CallData*, QMetaObject::Call) + 6064 (qv4qobjectwrapper.cpp:1704)
25 QtQml 0x109ec96fc QV4::QObjectMethod::callPrecise(QQmlObjectOrGadget const&, QQmlPropertyData const&, QV4::ExecutionEngine*, QV4::CallData*, QMetaObject::Call) + 840 (qv4qobjectwrapper.cpp:2076)
26 QtQml 0x109ecf598 QV4::QObjectMethod::callInternal(QV4::Value const*, QV4::Value const*, int) const::$_2::operator()() const + 20 (qv4qobjectwrapper.cpp:3078) [inlined]
27 QtQml 0x109ecf598 _ZZNK3QV413QObjectMethod12callInternalEPKNS_5ValueES3_iENK3$_0clIZNKS0_12callInternalES3_S3_iE3$_2EEDaRKT_ + 20 (qv4qobjectwrapper.cpp:3055) [inlined]
28 QtQml 0x109ecf598 QV4::QObjectMethod::callInternal(QV4::Value const*, QV4::Value const*, int) const + 1944 (qv4qobjectwrapper.cpp:3078)
29 QtQml 0x109f8ef20 QV4::FunctionObject::call(QV4::Value const*, QV4::Value const*, int) const + 40 (qv4functionobject_p.h:187) [inlined]
30 QtQml 0x109f8ef20 QV4::FunctionObject::call(QV4::JSCallData const&) const + 40 (qv4jscall_p.h:105) [inlined]
31 QtQml 0x109f8ef20 QQmlDelayedCallQueue::DelayedFunctionCall::execute(QV4::ExecutionEngine*) const + 456 (qqmldelayedcallqueue.cpp:41)
32 QtQml 0x109f8fc34 QQmlDelayedCallQueue::executeAllExpired_Later() + 200 (qqmldelayedcallqueue.cpp:172)
33 QtCore 0x108be6244 QObject::event(QEvent*) + 672 (qobject.cpp:1431)
34 QtWidgets 0x109247c74 QApplicationPrivate::notify_helper(QObject*, QEvent*) + 332 (qapplication.cpp:3303)
35 QtWidgets 0x109248c4c QApplication::notify(QObject*, QEvent*) + 516 (qapplication.cpp:3253)
36 QtCore 0x108b9cfb8 QCoreApplication::notifyInternal2(QObject*, QEvent*) + 124 (qcoreapplication.cpp:1106) [inlined]
37 QtCore 0x108b9cfb8 QCoreApplication::sendEvent(QObject*, QEvent*) + 172 (qcoreapplication.cpp:1546)
38 QtCore 0x108b9d838 QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) + 524 (qcoreapplication.cpp:1879)
39 libqcocoa.dylib 0x10914c544 QCocoaEventDispatcherPrivate::processPostedEvents() + 360 (qcocoaeventdispatcher.mm:871)
40 libqcocoa.dylib 0x10914d7e4 QCocoaEventDispatcherPrivate::postedEventsSourceCallback(void*) + 500 (qcocoaeventdispatcher.mm:893)
41 CoreFoundation 0x18ca41ad8 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
42 CoreFoundation 0x18ca41a6c __CFRunLoopDoSource0 + 172
43 CoreFoundation 0x18ca417d8 __CFRunLoopDoSources0 + 232
44 CoreFoundation 0x18ca40468 __CFRunLoopRun + 820
45 CoreFoundation 0x18cafe898 _CFRunLoopRunSpecificWithOptions + 532
46 HIToolbox 0x19940c714 RunCurrentEventLoopInMode + 316
47 HIToolbox 0x19940f99c ReceiveNextEventCommon + 464
48 HIToolbox 0x1995991c0 _BlockUntilNextEventMatchingListInMode + 48
49 AppKit 0x19130a620 _DPSBlockUntilNextEventMatchingListInMode + 236
50 AppKit 0x190e26edc _DPSNextEvent + 588
51 AppKit 0x19186eb6c -[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 688
52 AppKit 0x19186e878 -[NSApplication(NSEventRouting) nextEventMatchingMask:untilDate:inMode:dequeue:] + 72
53 AppKit 0x190e1f720 -[NSApplication run] + 368
54 libqcocoa.dylib 0x10914b068 QCocoaEventDispatcher::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 2192 (qcocoaeventdispatcher.mm:374)
55 QtCore 0x108ba667c QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) + 36 (qeventloop.cpp:104) [inlined]
56 QtCore 0x108ba667c QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) + 588 (qeventloop.cpp:186)
57 QtCore 0x108b9ccc8 QCoreApplication::exec() + 228 (qcoreapplication.cpp:1449)
58 mscore 0x10445602c main + 944
59 dyld 0x18c5e5924 start + 6400
What is the latest version of MuseScore Studio where this issue is present?
master
Regression
No.
Operating system
*
Additional context
This is a very fragile part of the code that has not a single test case, and is so hidden in the UI that it likely isn't tested often.
For reasons unrelated to this issue, I tried rewriting Excerpt::setVoiceVisible so that it clears the existing staff and refills it, instead of creating a completely new staff, which is wasteful and annoying, but that didn't make a difference for this issue.
Checklist
- This report follows the guidelines for reporting bugs and issues
- I have verified that this issue has not been logged before, by searching the issue tracker for similar issues
- I have attached all requested files and information to this report
- I have attempted to identify the root problem as concisely as possible, and have used minimal reproducible examples where possible
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.