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:
parent
0f81cf83a8
commit
f1fee888c2
@ -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 );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user