New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[MU3] Solve a crash when score contains a vbox which is not on top of a page. #7778
Conversation
libmscore/layout.cpp
Outdated
@@ -5120,7 +5120,7 @@ VerticalGapData::VerticalGapData(bool first, System *sys, Staff *st, SysStaff *s | |||
_normalisedSpacing = system->y() + (sysStaff ? sysStaff->y() : 0.0) - y; | |||
_maxActualSpacing = system->score()->styleP(Sid::maxStaffSpread); | |||
|
|||
Spacer* spacer { sys->upSpacer(st->idx(), nextSpacer) }; | |||
Spacer* spacer { st ? sys->upSpacer(st->idx(), nextSpacer) : nullptr }; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe (sys && st)
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, there is always a system, a VBox
is also a system. However, a VBox
doesn't have any SysStaff
's and that caused the crash (if the VBox
was somewhere in the middle of the page).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So maybe it'd never happen (sounds like 'famous last words' though), but that check won't harm either
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If a test is required, this will be a wrong place since system
is already dereferenced several time times before (lines 5540, 5543 and 5544). Also before calling the constructor the system
argument is dereferenced already.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
system
is used before, not sys
. Except in the constructor, but who knows what system(sys)
does if sys
is a nullptr
.
but yes, probably not need to check, not there at least
anyway: how to reproduce the issue prior to this change?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is in the constructor and with system(sys)
the member system
is initialized with the argument sys
, so both are the same.
The issue can be reproduced creating a VBox
somewhere after the first system.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We, no, I can't reproduce the issue.
And a mix of using system
and sys
looks wrong to me
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You tried to reproduce with 3.6.2 of the 3.x branch? The crash occurs in the 3.x branch (and master) only, not in 3.6.2 .
Strictly speaking, mix of sys
and system
is not "wrong" but it certainly is confusing and is corrected.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah, I tried to reproduce in 3.6.2, so that crash got to be a later regression.
And yes, 'wrong' is a bit strong, but certainly confusing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, a later regression due to PR #7529
5c7446e
to
477013f
Compare
When a
VBox
found, aVerticalGapData
object is created but if thisVBox
wasn't the first element on a page, the application crashed because the constructor was looking for aSpacer
on a non-existing staff.PR #7779 is similar for
master
.