From 5ca314e5ccf3dfb98fdea9d37646baca66d75ec3 Mon Sep 17 00:00:00 2001 From: John Glover <glover.john@gmail.com> Date: Thu, 9 Dec 2010 22:19:17 +0000 Subject: Fixed bug in SMS peak detection - find_peaks was leaking memory wen saving peaks, and a pointer assignment in find_peaks could lead to a double free in freeAnalysis/freeSpectralPeaks. --- sms/analysis.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'sms/analysis.c') diff --git a/sms/analysis.c b/sms/analysis.c index 90bec7f..ec4e0fe 100644 --- a/sms/analysis.c +++ b/sms/analysis.c @@ -156,11 +156,6 @@ int sms_findPeaks(int sizeWaveform, sfloat *pWaveform, SMS_AnalParams *pAnalPara /* initialize the current frame */ sms_initFrame(iCurrentFrame, pAnalParams, pAnalParams->windowSize); - if(sms_errorCheck()) - { - printf("Error in init frame: %s \n", sms_errorString()); - return 0; - } if(pAnalParams->ppFrames[iCurrentFrame]->iStatus == SMS_FRAME_READY) { @@ -196,14 +191,17 @@ int sms_findPeaks(int sizeWaveform, sfloat *pWaveform, SMS_AnalParams *pAnalPara /* save peaks */ pSpectralPeaks->nPeaksFound = pAnalParams->ppFrames[iCurrentFrame]->nPeaks; pSpectralPeaks->nPeaks = pAnalParams->maxPeaks; - pSpectralPeaks->pSpectralPeaks = pAnalParams->ppFrames[iCurrentFrame]->pSpectralPeaks; - /* convert peak amps to linear */ for(i = 0; i < pSpectralPeaks->nPeaks; i++) { if(i < pSpectralPeaks->nPeaksFound) { - pSpectralPeaks->pSpectralPeaks[i].fMag = pow(10.0, 0.05*(pSpectralPeaks->pSpectralPeaks[i].fMag)); + pSpectralPeaks->pSpectralPeaks[i].fMag = + pow(10.0, 0.05*(pAnalParams->ppFrames[iCurrentFrame]->pSpectralPeaks[i].fMag)); + pSpectralPeaks->pSpectralPeaks[i].fFreq = + pAnalParams->ppFrames[iCurrentFrame]->pSpectralPeaks[i].fFreq; + pSpectralPeaks->pSpectralPeaks[i].fPhase = + pAnalParams->ppFrames[iCurrentFrame]->pSpectralPeaks[i].fPhase; } else { -- cgit v1.2.3