1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-25 00:48:10 +02:00

Fix null pointer dereferences caught by Vigilant Sentry. Ask some questions about some code.

This commit is contained in:
v.audacity 2011-11-24 23:12:52 +00:00
parent 0f81cf83a8
commit f1fee888c2
4 changed files with 32 additions and 25 deletions

@ -330,6 +330,9 @@ bool LabelDialog::TransferDataFromWindow()
break; break;
} }
} }
wxASSERT(t);
if (!t)
return false;
// Add the label to it // Add the label to it
if (!rd->title.IsEmpty()) { if (!rd->title.IsEmpty()) {

@ -2967,7 +2967,9 @@ void AudacityProject::OnExportMIDI(){
return; return;
} }
assert(nt); wxASSERT(nt);
if (!nt)
return;
while(true){ while(true){

@ -969,7 +969,8 @@ void TrackArtist::DrawMinMaxRMS(wxDC &dc, const wxRect &r, const double env[],
double v; double v;
v = min[x] * env[x]; v = min[x] * env[x];
if (mShowClipping && v <= -MAX_AUDIO) { if (clipped && mShowClipping && (v <= -MAX_AUDIO))
{
if (clipcnt == 0 || clipped[clipcnt - 1] != xx) { if (clipcnt == 0 || clipped[clipcnt - 1] != xx) {
clipped[clipcnt++] = 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); r.height, dB, true, mdBrange, true);
v = max[x] * env[x]; v = max[x] * env[x];
if (mShowClipping && v >= MAX_AUDIO) { if (clipped && mShowClipping && (v >= MAX_AUDIO))
{
if (clipcnt == 0 || clipped[clipcnt - 1] != xx) { if (clipcnt == 0 || clipped[clipcnt - 1] != xx) {
clipped[clipcnt++] = 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'. // 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); 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; clipped[clipcnt++] = xx;
}
ypos[s] = GetWaveYPos(tt, zoomMin, zoomMax, ypos[s] = GetWaveYPos(tt, zoomMin, zoomMax,
r.height, dB, true, mdBrange, false); r.height, dB, true, mdBrange, false);
if (ypos[s] < -1) { if (ypos[s] < -1) {
@ -2422,12 +2423,13 @@ void TrackArtist::DrawNoteTrack(NoteTrack *track,
Alg_seq_ptr seq = track->mSeq; Alg_seq_ptr seq = track->mSeq;
if (!seq) { if (!seq) {
assert(track->mSerializationBuffer); assert(track->mSerializationBuffer);
Alg_track_ptr alg_track = seq->unserialize(track->mSerializationBuffer, // 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.
track->mSerializationLength); //Alg_track_ptr alg_track = seq->unserialize(track->mSerializationBuffer,
assert(alg_track->get_type() == 's'); // track->mSerializationLength);
track->mSeq = seq = (Alg_seq_ptr) alg_track; //assert(alg_track->get_type() == 's');
free(track->mSerializationBuffer); //track->mSeq = seq = (Alg_seq_ptr) alg_track;
track->mSerializationBuffer = NULL; //free(track->mSerializationBuffer);
//track->mSerializationBuffer = NULL;
} }
assert(seq); assert(seq);
int visibleChannels = track->mVisibleChannels; int visibleChannels = track->mVisibleChannels;

@ -1970,7 +1970,8 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event,
} }
//Determine if user clicked on a label track. //Determine if user clicked on a label track.
if (pTrack->GetKind() == Track::Label) { if (pTrack && (pTrack->GetKind() == Track::Label))
{
LabelTrack *lt = (LabelTrack *) pTrack; LabelTrack *lt = (LabelTrack *) pTrack;
if (lt->HandleMouse(event, r,//mCapturedRect, if (lt->HandleMouse(event, r,//mCapturedRect,
mViewInfo->h, mViewInfo->zoom, mViewInfo->h, mViewInfo->zoom,
@ -2164,10 +2165,8 @@ void TrackPanel::ExtendSelection(int mouseXCoordinate, int trackLeftEdge,
mViewInfo->sel1 = sel1; 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. //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 (pTrack && (pTrack->GetKind() == Track::Wave) && ODManager::IsInstanceCreated())
if(ODManager::IsInstanceCreated()) ODManager::Instance()->DemandTrackUpdate((WaveTrack*)pTrack,sel0); //sel0 is sometimes less than mSelStart
ODManager::Instance()->DemandTrackUpdate((WaveTrack*)pTrack,sel0); //sel0 is sometimes less than mSelStart
}
// Full refresh since the label area may need to indicate // Full refresh since the label area may need to indicate
// newly selected tracks. // newly selected tracks.
@ -4524,7 +4523,8 @@ void TrackPanel::HandleResizeDrag(wxMouseEvent & event)
// minimized heights. // minimized heights.
if (mCapturedTrack->GetLinked()) { if (mCapturedTrack->GetLinked()) {
mInitialUpperTrackHeight = mCapturedTrack->GetHeight(); 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) { else if (link) {
mInitialUpperTrackHeight = link->GetHeight(); mInitialUpperTrackHeight = link->GetHeight();
@ -5882,12 +5882,8 @@ void TrackPanel::UpdateVRulerSize()
/// TrackPanel::OnNextTrack. /// TrackPanel::OnNextTrack.
void TrackPanel::OnPrevTrack( bool shift ) void TrackPanel::OnPrevTrack( bool shift )
{ {
Track *t;
Track *p;
TrackListIterator iter( mTracks ); TrackListIterator iter( mTracks );
bool tSelected,pSelected; Track* t = GetFocusedTrack();
t = GetFocusedTrack(); // Get currently focused track
if( t == NULL ) // if there isn't one, focus on last if( t == NULL ) // if there isn't one, focus on last
{ {
t = iter.Last(); t = iter.Last();
@ -5896,18 +5892,21 @@ void TrackPanel::OnPrevTrack( bool shift )
return; return;
} }
Track* p = NULL;
bool tSelected = false;
bool pSelected = false;
if( shift ) if( shift )
{ {
p = mTracks->GetPrev( t, true ); // Get previous track p = mTracks->GetPrev( t, true ); // Get previous track
if( p == NULL ) // On first track if( p == NULL ) // On first track
{ {
wxBell(); wxBell(); // ANSWER-ME: Why?
if( mCircularTrackNavigation ) if( mCircularTrackNavigation )
{ {
TrackListIterator iter( mTracks ); TrackListIterator iter( mTracks );
for( Track *d = iter.First(); d; d = iter.Next( true ) ) 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 else
@ -5917,7 +5916,8 @@ void TrackPanel::OnPrevTrack( bool shift )
} }
} }
tSelected = t->GetSelected(); tSelected = t->GetSelected();
pSelected = p->GetSelected(); if (p)
pSelected = p->GetSelected();
if( tSelected && pSelected ) if( tSelected && pSelected )
{ {
mTracks->Select( t, false ); mTracks->Select( t, false );