mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-03 00:59:43 +02:00
Fix null pointer dereferences caught by Vigilant Sentry. Ask some questions about some code.
This commit is contained in:
parent
0f81cf83a8
commit
f1fee888c2
@ -330,6 +330,9 @@ bool LabelDialog::TransferDataFromWindow()
|
||||
break;
|
||||
}
|
||||
}
|
||||
wxASSERT(t);
|
||||
if (!t)
|
||||
return false;
|
||||
|
||||
// Add the label to it
|
||||
if (!rd->title.IsEmpty()) {
|
||||
|
@ -2967,7 +2967,9 @@ void AudacityProject::OnExportMIDI(){
|
||||
return;
|
||||
}
|
||||
|
||||
assert(nt);
|
||||
wxASSERT(nt);
|
||||
if (!nt)
|
||||
return;
|
||||
|
||||
while(true){
|
||||
|
||||
|
@ -969,7 +969,8 @@ void TrackArtist::DrawMinMaxRMS(wxDC &dc, const wxRect &r, const double env[],
|
||||
double v;
|
||||
|
||||
v = min[x] * env[x];
|
||||
if (mShowClipping && v <= -MAX_AUDIO) {
|
||||
if (clipped && mShowClipping && (v <= -MAX_AUDIO))
|
||||
{
|
||||
if (clipcnt == 0 || clipped[clipcnt - 1] != xx) {
|
||||
clipped[clipcnt++] = xx;
|
||||
}
|
||||
@ -978,7 +979,8 @@ void TrackArtist::DrawMinMaxRMS(wxDC &dc, const wxRect &r, const double env[],
|
||||
r.height, dB, true, mdBrange, true);
|
||||
|
||||
v = max[x] * env[x];
|
||||
if (mShowClipping && v >= MAX_AUDIO) {
|
||||
if (clipped && mShowClipping && (v >= MAX_AUDIO))
|
||||
{
|
||||
if (clipcnt == 0 || clipped[clipcnt - 1] != xx) {
|
||||
clipped[clipcnt++] = xx;
|
||||
}
|
||||
@ -1128,9 +1130,8 @@ void TrackArtist::DrawIndividualSamples(wxDC &dc, const wxRect &r,
|
||||
|
||||
// t0 + clip->GetOffset() is 'h' (the absolute time of the left edge) for 'r'.
|
||||
tt = buffer[s] * clip->GetEnvelope()->GetValueAtX(xx + r.x, r, t0 + clip->GetOffset(), pps);
|
||||
if (mShowClipping && (tt <= -MAX_AUDIO || tt >= MAX_AUDIO)) {
|
||||
if (clipped && mShowClipping && ((tt <= -MAX_AUDIO) || (tt >= MAX_AUDIO)))
|
||||
clipped[clipcnt++] = xx;
|
||||
}
|
||||
ypos[s] = GetWaveYPos(tt, zoomMin, zoomMax,
|
||||
r.height, dB, true, mdBrange, false);
|
||||
if (ypos[s] < -1) {
|
||||
@ -2422,12 +2423,13 @@ void TrackArtist::DrawNoteTrack(NoteTrack *track,
|
||||
Alg_seq_ptr seq = track->mSeq;
|
||||
if (!seq) {
|
||||
assert(track->mSerializationBuffer);
|
||||
Alg_track_ptr alg_track = seq->unserialize(track->mSerializationBuffer,
|
||||
track->mSerializationLength);
|
||||
assert(alg_track->get_type() == 's');
|
||||
track->mSeq = seq = (Alg_seq_ptr) alg_track;
|
||||
free(track->mSerializationBuffer);
|
||||
track->mSerializationBuffer = NULL;
|
||||
// FIX-ME: This is in a clause where we *know* seq is NULL, so why are you dereferencing it?!!! I'm commenting out the rest of this clause.
|
||||
//Alg_track_ptr alg_track = seq->unserialize(track->mSerializationBuffer,
|
||||
// track->mSerializationLength);
|
||||
//assert(alg_track->get_type() == 's');
|
||||
//track->mSeq = seq = (Alg_seq_ptr) alg_track;
|
||||
//free(track->mSerializationBuffer);
|
||||
//track->mSerializationBuffer = NULL;
|
||||
}
|
||||
assert(seq);
|
||||
int visibleChannels = track->mVisibleChannels;
|
||||
|
@ -1970,7 +1970,8 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event,
|
||||
}
|
||||
|
||||
//Determine if user clicked on a label track.
|
||||
if (pTrack->GetKind() == Track::Label) {
|
||||
if (pTrack && (pTrack->GetKind() == Track::Label))
|
||||
{
|
||||
LabelTrack *lt = (LabelTrack *) pTrack;
|
||||
if (lt->HandleMouse(event, r,//mCapturedRect,
|
||||
mViewInfo->h, mViewInfo->zoom,
|
||||
@ -2164,10 +2165,8 @@ void TrackPanel::ExtendSelection(int mouseXCoordinate, int trackLeftEdge,
|
||||
mViewInfo->sel1 = sel1;
|
||||
|
||||
//On-Demand: check to see if there is an OD thing associated with this track. If so we want to update the focal point for the task.
|
||||
if (pTrack->GetKind() == Track::Wave) {
|
||||
if(ODManager::IsInstanceCreated())
|
||||
ODManager::Instance()->DemandTrackUpdate((WaveTrack*)pTrack,sel0); //sel0 is sometimes less than mSelStart
|
||||
}
|
||||
if (pTrack && (pTrack->GetKind() == Track::Wave) && ODManager::IsInstanceCreated())
|
||||
ODManager::Instance()->DemandTrackUpdate((WaveTrack*)pTrack,sel0); //sel0 is sometimes less than mSelStart
|
||||
|
||||
// Full refresh since the label area may need to indicate
|
||||
// newly selected tracks.
|
||||
@ -4524,7 +4523,8 @@ void TrackPanel::HandleResizeDrag(wxMouseEvent & event)
|
||||
// minimized heights.
|
||||
if (mCapturedTrack->GetLinked()) {
|
||||
mInitialUpperTrackHeight = mCapturedTrack->GetHeight();
|
||||
mInitialTrackHeight = link->GetHeight();
|
||||
if (link) // FIX-ME: This wasn't checked previously. Is mInitialTrackHeight safe if this doesn't fire?
|
||||
mInitialTrackHeight = link->GetHeight();
|
||||
}
|
||||
else if (link) {
|
||||
mInitialUpperTrackHeight = link->GetHeight();
|
||||
@ -5882,12 +5882,8 @@ void TrackPanel::UpdateVRulerSize()
|
||||
/// TrackPanel::OnNextTrack.
|
||||
void TrackPanel::OnPrevTrack( bool shift )
|
||||
{
|
||||
Track *t;
|
||||
Track *p;
|
||||
TrackListIterator iter( mTracks );
|
||||
bool tSelected,pSelected;
|
||||
|
||||
t = GetFocusedTrack(); // Get currently focused track
|
||||
Track* t = GetFocusedTrack();
|
||||
if( t == NULL ) // if there isn't one, focus on last
|
||||
{
|
||||
t = iter.Last();
|
||||
@ -5896,18 +5892,21 @@ void TrackPanel::OnPrevTrack( bool shift )
|
||||
return;
|
||||
}
|
||||
|
||||
Track* p = NULL;
|
||||
bool tSelected = false;
|
||||
bool pSelected = false;
|
||||
if( shift )
|
||||
{
|
||||
p = mTracks->GetPrev( t, true ); // Get previous track
|
||||
if( p == NULL ) // On first track
|
||||
{
|
||||
wxBell();
|
||||
wxBell(); // ANSWER-ME: Why?
|
||||
if( mCircularTrackNavigation )
|
||||
{
|
||||
TrackListIterator iter( mTracks );
|
||||
for( Track *d = iter.First(); d; d = iter.Next( true ) )
|
||||
{
|
||||
p = d;
|
||||
p = d; // ANSWER-ME: Is there supposed to be a stopping condition here? If seeking last, why not just use iter.Last()? And what does "d" stand for?!
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -5917,7 +5916,8 @@ void TrackPanel::OnPrevTrack( bool shift )
|
||||
}
|
||||
}
|
||||
tSelected = t->GetSelected();
|
||||
pSelected = p->GetSelected();
|
||||
if (p)
|
||||
pSelected = p->GetSelected();
|
||||
if( tSelected && pSelected )
|
||||
{
|
||||
mTracks->Select( t, false );
|
||||
|
Loading…
x
Reference in New Issue
Block a user