Skip to content

Commit

Permalink
Merge pull request #3591 from AntonioBL/fermatacrash
Browse files Browse the repository at this point in the history
fix #270634: crash when importing file with fermata
  • Loading branch information
lasconic committed Apr 4, 2018
2 parents 2cbc44f + 23c3129 commit 08a3f1b
Show file tree
Hide file tree
Showing 6 changed files with 93 additions and 6 deletions.
6 changes: 4 additions & 2 deletions libmscore/read114.cpp
Expand Up @@ -1106,8 +1106,9 @@ static void readMeasure(Measure* m, int staffIdx, XmlReader& e)
else if (tag == "Chord") {
Chord* chord = new Chord(m->score());
chord->setTrack(e.track());
readChord(chord, e);
segment = m->getSegment(SegmentType::ChordRest, e.tick());
chord->setParent(segment);
readChord(chord, e);
if (chord->noteType() != NoteType::NORMAL) {
graceNotes.push_back(chord);
if (chord->tremolo() && chord->tremolo()->tremoloType() < TremoloType::R8) {
Expand Down Expand Up @@ -1196,8 +1197,9 @@ static void readMeasure(Measure* m, int staffIdx, XmlReader& e)
rest->setDurationType(TDuration::DurationType::V_MEASURE);
rest->setDuration(m->timesig()/timeStretch);
rest->setTrack(e.track());
readRest(rest, e);
segment = m->getSegment(SegmentType::ChordRest, e.tick());
rest->setParent(segment);
readRest(rest, e);
segment->add(rest);

if (!rest->duration().isValid()) // hack
Expand Down
8 changes: 7 additions & 1 deletion libmscore/read206.cpp
Expand Up @@ -1482,6 +1482,11 @@ Element* readArticulation(ChordRest* cr, XmlReader& e)
e.unknown();
}
}
// Special case for "no type" = ufermata, with missing subtype tag
if (!el) {
el = new Fermata(sym, cr->score());
setFermataPlacement(el, anchor, direction);
}
el->setTrack(cr->staffIdx() * VOICES);
return el;
}
Expand Down Expand Up @@ -1634,8 +1639,9 @@ static void readMeasure(Measure* m, int staffIdx, XmlReader& e)
rest->setDurationType(TDuration::DurationType::V_MEASURE);
rest->setDuration(m->timesig()/timeStretch);
rest->setTrack(e.track());
readRest(rest, e);
segment = m->getSegment(SegmentType::ChordRest, e.tick());
rest->setParent(segment);
readRest(rest, e);
segment->add(rest);

if (!rest->duration().isValid()) // hack
Expand Down
18 changes: 16 additions & 2 deletions mtest/libmscore/compat114/articulations-ref.mscx
Expand Up @@ -538,12 +538,26 @@
</Chord>
</Measure>
<Measure number="10">
<Fermata>
<subtype>fermataAbove</subtype>
</Fermata>
<Rest>
<durationType>measure</durationType>
<duration>4/4</duration>
<durationType>quarter</durationType>
</Rest>
<Rest>
<durationType>quarter</durationType>
</Rest>
<Rest>
<durationType>quarter</durationType>
</Rest>
<Rest>
<durationType>quarter</durationType>
</Rest>
</Measure>
<Measure number="11">
<Fermata>
<subtype>fermataAbove</subtype>
</Fermata>
<Rest>
<durationType>measure</durationType>
<duration>4/4</duration>
Expand Down
15 changes: 14 additions & 1 deletion mtest/libmscore/compat114/articulations.mscx
Expand Up @@ -460,12 +460,25 @@
</Measure>
<Measure number="10">
<Rest>
<durationType>measure</durationType>
<durationType>quarter</durationType>
<Articulation>
</Articulation>
</Rest>
<Rest>
<durationType>quarter</durationType>
</Rest>
<Rest>
<durationType>quarter</durationType>
</Rest>
<Rest>
<durationType>quarter</durationType>
</Rest>
</Measure>
<Measure number="11">
<Rest>
<durationType>measure</durationType>
<Articulation>
</Articulation>
</Rest>
</Measure>
<Measure number="12">
Expand Down
26 changes: 26 additions & 0 deletions mtest/libmscore/compat206/articulations-ref.mscx
Expand Up @@ -1829,6 +1829,32 @@
<tpc>14</tpc>
</Note>
</Chord>
</Measure>
<Measure number="40">
<Fermata>
<subtype>fermataAbove</subtype>
</Fermata>
<Rest>
<durationType>quarter</durationType>
</Rest>
<Fermata>
<subtype>fermataShortAbove</subtype>
</Fermata>
<Rest>
<durationType>quarter</durationType>
</Rest>
<Fermata>
<subtype>fermataLongAbove</subtype>
</Fermata>
<Rest>
<durationType>quarter</durationType>
</Rest>
<Fermata>
<subtype>fermataVeryLongAbove</subtype>
</Fermata>
<Rest>
<durationType>quarter</durationType>
</Rest>
<BarLine>
</BarLine>
</Measure>
Expand Down
26 changes: 26 additions & 0 deletions mtest/libmscore/compat206/articulations.mscx
Expand Up @@ -1834,6 +1834,32 @@
<tpc>14</tpc>
</Note>
</Chord>
</Measure>
<Measure number="40">
<Rest>
<durationType>quarter</durationType>
<Articulation>
<subtype>fermata</subtype>
</Articulation>
</Rest>
<Rest>
<durationType>quarter</durationType>
<Articulation>
<subtype>shortfermata</subtype>
</Articulation>
</Rest>
<Rest>
<durationType>quarter</durationType>
<Articulation>
<subtype>longfermata</subtype>
</Articulation>
</Rest>
<Rest>
<durationType>quarter</durationType>
<Articulation>
<subtype>verylongfermata</subtype>
</Articulation>
</Rest>
<BarLine>
<subtype>end</subtype>
<span>1</span>
Expand Down

0 comments on commit 08a3f1b

Please sign in to comment.