[4.7] Sort percussion notes before reading chord parentheses#33925
Merged
Conversation
Contributor
|
Tested on MacOS Tahoe 26.2, Windows 11, Ubuntu 22.04.3. Approved |
mike-spa
approved these changes
Jun 24, 2026
Contributor
This was referenced Jun 25, 2026
|
|
||
| void TRead::readNoteParenGroup(Chord* ch, XmlReader& e, ReadContext& ctx) | ||
| { | ||
| StaffGroup staffGroup = ctx.staff(ch->staffIdx())->staffTypeForElement(ch)->group(); |
Contributor
There was a problem hiding this comment.
Address sanitizer fails here
14: ==19952==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000a38 (pc 0x55c2453a4e41 bp 0x7ffc523b8650 sp 0x7ffc523b8640 T0)
14: ==19952==The signal is caused by a READ memory access.
14: ==19952==Hint: address points to the zero page.
14: #0 0x55c2453a4e41 in std::_Rb_tree<int, std::pair<int const, mu::engraving::StaffType>, std::_Select1st<std::pair<int const, mu::engraving::StaffType> >, std::less<int>, std::allocator<std::pair<int const, mu::engraving::StaffType> > >::empty() const /usr/include/c++/10/bits/stl_tree.h:1037
14: #1 0x55c2453a0f83 in std::map<int, mu::engraving::StaffType, std::less<int>, std::allocator<std::pair<int const, mu::engraving::StaffType> > >::empty() const /usr/include/c++/10/bits/stl_map.h:466
14: #2 0x55c245419bc9 in mu::engraving::StaffTypeList::uniqueStaffType() const /home/runner/work/MuseScore/MuseScore/src/engraving/dom/stafftypelist.h:45
14: #3 0x55c245405fd5 in mu::engraving::Staff::staffTypeForElement(mu::engraving::EngravingItem const*) const /home/runner/work/MuseScore/MuseScore/src/engraving/dom/staff.cpp:1250
14: #4 0x55c245e748e9 in mu::engraving::read460::TRead::readNoteParenGroup(mu::engraving::Chord*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&) ../src/engraving/rw/read460/tread.cpp:3839
14: #5 0x55c245e6704c in mu::engraving::read460::TRead::readProperties(mu::engraving::Chord*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&) ../src/engraving/rw/read460/tread.cpp:2561
14: #6 0x55c245e65f08 in mu::engraving::read460::TRead::read(mu::engraving::Chord*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&) ../src/engraving/rw/read460/tread.cpp:2452
14: #7 0x55c245e60483 in mu::engraving::read460::TRead::readProperties(mu::engraving::Ornament*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&) ../src/engraving/rw/read460/tread.cpp:1924
14: #8 0x55c245e60104 in mu::engraving::read460::TRead::read(mu::engraving::Ornament*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&) ../src/engraving/rw/read460/tread.cpp:1901
14: #9 0x55c245e7e5a6 in mu::engraving::read460::TRead::read(mu::engraving::Trill*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&) ../src/engraving/rw/read460/tread.cpp:4630
14: #10 0x55c245e4a8b1 in mu::engraving::read460::TRead::readItem(mu::engraving::EngravingItem*, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&) ../src/engraving/rw/read460/tread.cpp:337
14: #11 0x55c245e89445 in mu::engraving::read460::ConnectorInfoReader::read() ../src/engraving/rw/read460/connectorinforeader.cpp:110
14: #12 0x55c245e8a143 in mu::engraving::read460::ConnectorInfoReader::readConnector(std::shared_ptr<mu::engraving::read460::ConnectorInfoReader>, mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&) ../src/engraving/rw/read460/connectorinforeader.cpp:196
14: #13 0x55c245e7f70b in mu::engraving::read460::TRead::readSpanner(mu::engraving::XmlReader&, mu::engraving::read460::ReadContext&, mu::engraving::Score*, unsigned long) ../src/engraving/rw/read460/tread.cpp:4704
14: #14 0x55c244ee7674 in mu::engraving::read460::Read460::pasteStaff(mu::engraving::XmlReader&, mu::engraving::Segment*, unsigned long, mu::engraving::Fraction) /home/runner/work/MuseScore/MuseScore/src/engraving/rw/read460/read460.cpp:637
14: #15 0x55c2455176ea in mu::engraving::Score::pasteStaff(mu::engraving::XmlReader&, mu::engraving::Segment*, unsigned long, mu::engraving::Fraction) /home/runner/work/MuseScore/MuseScore/src/engraving/dom/paste.cpp:78
14: #16 0x55c245523bc9 in mu::engraving::Score::cmdPasteStaffList(muse::ByteArray&, mu::engraving::Fraction) /home/runner/work/MuseScore/MuseScore/src/engraving/dom/paste.cpp:664
14: #17 0x55c24552057a in mu::engraving::Score::cmdPaste(mu::engraving::IMimeData const*, mu::engraving::MuseScoreView*, mu::engraving::Fraction) /home/runner/work/MuseScore/MuseScore/src/engraving/dom/paste.cpp:514
14: #18 0x55c24383ac85 in Engraving_CopyPasteTests_copypasteparts_Test::TestBody() ../src/engraving/tests/copypaste_tests.cpp:800
14: #19 0x55c2462404cc in void testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) ../src/framework/testing/thirdparty/googletest/googletest/src/gtest.cc:2664
14: #20 0x55c246230fcc in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) ../src/framework/testing/thirdparty/googletest/googletest/src/gtest.cc:2700
14: #21 0x55c2461dda8f in testing::Test::Run() ../src/framework/testing/thirdparty/googletest/googletest/src/gtest.cc:2739
14: #22 0x55c2461df08e in testing::TestInfo::Run() ../src/framework/testing/thirdparty/googletest/googletest/src/gtest.cc:2885
14: #23 0x55c2461e0238 in testing::TestSuite::Run() ../src/framework/testing/thirdparty/googletest/googletest/src/gtest.cc:3063
14: #24 0x55c246207731 in testing::internal::UnitTestImpl::RunAllTests() ../src/framework/testing/thirdparty/googletest/googletest/src/gtest.cc:6054
14: #25 0x55c24624307e in bool testing::internal::HandleSehExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) ../src/framework/testing/thirdparty/googletest/googletest/src/gtest.cc:2664
14: #26 0x55c246233b71 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) ../src/framework/testing/thirdparty/googletest/googletest/src/gtest.cc:2700
14: #27 0x55c2462035bc in testing::UnitTest::Run() ../src/framework/testing/thirdparty/googletest/googletest/src/gtest.cc:5594
14: #28 0x55c2435dc19b in RUN_ALL_TESTS() (/home/runner/work/MuseScore/MuseScore/build.debug/src/engraving/tests/engraving_tests+0x84219b)
14: #29 0x55c2435dbace in main ../src/framework/testing/gmain.cpp:86
14: #30 0x7f5bfa229d8f (/lib/x86_64-linux-gnu/libc.so.6+0x29d8f)
14: #31 0x7f5bfa229e3f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e3f)
14: #32 0x55c2435dae94 in _start (/home/runner/work/MuseScore/MuseScore/build.debug/src/engraving/tests/engraving_tests+0x840e94)
14:
14: AddressSanitizer can not provide additional info.
14: SUMMARY: AddressSanitizer: SEGV /usr/include/c++/10/bits/stl_tree.h:1037 in std::_Rb_tree<int, std::pair<int const, mu::engraving::StaffType>, std::_Select1st<std::pair<int const, mu::engraving::StaffType> >, std::less<int>, std::allocator<std::pair<int const, mu::engraving::StaffType> > >::empty() const
14: ==19952==ABORTING
Contributor
Author
|
Fixed in #33940 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resolves: #33912
When writing to file, we store the note for which a parenthesis applies as an index of
m_notesinChord. This isn't reliable on file read for percussion, as lines haven't been calculated yet. Fortunately, we have enough information to sort the notes by the time we come to read chord parentheses.I think in 5.0, we should store links to these notes as EIDs which will always be reliable.