1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-23 16:08:07 +02:00

Bug 2803 - Audacity unresponsive after 'Fit to Height'

a) Fixed root cause, which is conversion of a
negative integer to a large unsigned, leading to
a very tall track.
b) Improved mitigation (in projects that already
have over tall tracks) by setting a smaller minimum
for the allowed size.
This commit is contained in:
James Crook 2021-06-08 22:05:56 +01:00
parent 1b9e938869
commit 404ad6ad8a
2 changed files with 8 additions and 3 deletions

View File

@ -145,7 +145,12 @@ void DoZoomFitV(AudacityProject &project)
- range.sum( TrackView::GetTrackHeight );
// Give each resized track the average of the remaining height
height = height / count;
// Bug 2803: Cast count to int, because otherwise the result of
// division will be unsigned too, and will be a very large number
// if height was negative!
height = height / (int)count;
// Use max() so that we don't set a negative height when there is
// not enough room.
height = std::max( (int)TrackInfo::MinimumTrackHeight(), height );
for (auto t : range)

View File

@ -97,10 +97,10 @@ bool TrackView::HandleXMLAttribute( const wxChar *attr, const wxChar *value )
long nValue;
if (!wxStrcmp(attr, wxT("height")) &&
XMLValueChecker::IsGoodInt(strValue) && strValue.ToLong(&nValue)) {
// Extreme values for track height (likely caused by integer overflow)
// Bug 2803: Extreme values for track height (caused by integer overflow)
// will stall Audacity as it tries to create an enormous vertical ruler.
// So clamp to reasonable values.
nValue = std::max( 150l, std::min( nValue, 1000l ));
nValue = std::max( 40l, std::min( nValue, 1000l ));
SetHeight(nValue);
return true;
}