Skip to content

Commit

Permalink
Fix #317425: Corruption/crash after repeating a 256th note or smaller.
Browse files Browse the repository at this point in the history
Resolves: https://musescore.org/en/node/317425.

In the MIME data for a StaffList, the starting tick and tick length are encoded as integers, which is not sufficient when dealing with durations shorter than 1/128th. But there is really no reason for this, since ticks are stored internally as Fractions, and Fractions can be converted to and from strings without any loss in precision.
  • Loading branch information
mattmcclinch authored and vpereverzev committed Mar 9, 2021
1 parent 033654c commit c6423f2
Show file tree
Hide file tree
Showing 46 changed files with 48 additions and 48 deletions.
4 changes: 2 additions & 2 deletions libmscore/paste.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,8 @@ bool Score::pasteStaff(XmlReader& e, Segment* dst, int dstStaff, Fraction scale)
break;
}
}
Fraction tickStart = Fraction::fromTicks(e.intAttribute("tick", 0));
tickLen = Fraction::fromTicks(e.intAttribute("len", 0));
Fraction tickStart = Fraction::fromString(e.attribute("tick", "0"));
tickLen = Fraction::fromString(e.attribute("len", "0"));
Fraction oTickLen = tickLen;
tickLen *= scale;
int staffStart = e.intAttribute("staff", 0);
Expand Down
4 changes: 2 additions & 2 deletions libmscore/select.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -813,10 +813,10 @@ QByteArray Selection::staffMimeData() const
Fraction ticks = tickEnd() - tickStart();
int staves = staffEnd() - staffStart();
if (!MScore::testMode) {
xml.stag(QString("StaffList version=\"" MSC_VERSION "\" tick=\"%1\" len=\"%2\" staff=\"%3\" staves=\"%4\"").arg(tickStart().ticks()).arg(ticks.ticks()).arg(staffStart()).arg(staves));
xml.stag(QString("StaffList version=\"" MSC_VERSION "\" tick=\"%1\" len=\"%2\" staff=\"%3\" staves=\"%4\"").arg(tickStart().toString()).arg(ticks.toString()).arg(staffStart()).arg(staves));
}
else {
xml.stag(QString("StaffList version=\"2.00\" tick=\"%1\" len=\"%2\" staff=\"%3\" staves=\"%4\"").arg(tickStart().ticks()).arg(ticks.ticks()).arg(staffStart()).arg(staves));
xml.stag(QString("StaffList version=\"2.00\" tick=\"%1\" len=\"%2\" staff=\"%3\" staves=\"%4\"").arg(tickStart().toString()).arg(ticks.toString()).arg(staffStart()).arg(staves));
}
Segment* seg1 = _startSegment;
Segment* seg2 = _endSegment;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter1-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter10-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter11-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter12-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter13-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter14-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="3840" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="8/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter15-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="3840" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="8/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter16-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter17-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="1">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter18-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter19-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter2-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter20-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter22-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter23-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter3-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter4-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter5-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter6-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter7-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter8-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down
2 changes: 1 addition & 1 deletion mtest/libmscore/selectionfilter/selectionfilter9-ref.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<StaffList version="2.00" tick="0" len="1920" staff="0" staves="1">
<StaffList version="2.00" tick="0/1" len="4/4" staff="0" staves="1">
<Staff id="0">
<voiceOffset>
<voice id="0">0</voice>
Expand Down

0 comments on commit c6423f2

Please sign in to comment.