musescore / musescore/MuseScore

"Voices visible in score" can corrupt measures or even EIDs

Open
#29,166 0 comments 0 reactions 3 assignees View on GitHub

@zacjansheski is already working on this.

Since Aug 9, 2025.

corruption crash P1
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
  1. Create a score
  2. Add notes in voice 1
  3. Select note that's not on first beat
  4. While in note input mode, press Cmd+Alt+2 to go into second voice, and press a note name
  5. Open part score
  6. Optional: Save, close, reopen -> without this step, you get a corruption at the next step, after which you can't continue.
  7. In Layout panel, expand instrument, click settings icon
  8. Uncheck voice 1 visibility
  9. 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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.