SampleBuffer: always sanitize start and end frame settings

An end frame variable always has to be greater than a start frame in
order to prevent crashes due to negative frame counts being calculated
in getSampleFragment() otherwise.

Closes #629.
This commit is contained in:
Tobias Doerffel
2014-04-30 11:31:32 +02:00
parent e9073c88bc
commit 09fb597af4
2 changed files with 59 additions and 25 deletions

View File

@@ -154,6 +154,25 @@ SampleBuffer::~SampleBuffer()
void SampleBuffer::sanitizeSettings()
{
m_varLock.lock();
if( m_startFrame >= m_endFrame )
{
m_endFrame = m_startFrame+1;
}
if( m_loopStartFrame >= m_loopEndFrame )
{
m_loopEndFrame = m_loopStartFrame+1;
}
m_varLock.unlock();
}
void SampleBuffer::update( bool _keep_settings )
{
@@ -828,6 +847,27 @@ void SampleBuffer::visualize( QPainter & _p, const QRect & _dr,
void SampleBuffer::setLoopStartFrame( f_cnt_t start )
{
m_varLock.lock();
m_loopStartFrame = start;
m_varLock.unlock();
sanitizeSettings();
}
void SampleBuffer::setLoopEndFrame( f_cnt_t end )
{
m_varLock.lock();
m_loopEndFrame = end;
m_varLock.unlock();
sanitizeSettings();
}
QString SampleBuffer::openAudioFile() const
{
@@ -1240,21 +1280,25 @@ void SampleBuffer::loadFromBase64( const QString & _data )
void SampleBuffer::setStartFrame( const f_cnt_t _s )
void SampleBuffer::setStartFrame( f_cnt_t start )
{
m_varLock.lock();
m_loopStartFrame = m_startFrame = _s;
m_loopStartFrame = m_startFrame = start;
m_varLock.unlock();
sanitizeSettings();
}
void SampleBuffer::setEndFrame( const f_cnt_t _e )
void SampleBuffer::setEndFrame( f_cnt_t end )
{
m_varLock.lock();
m_loopEndFrame = m_endFrame = _e;
m_loopEndFrame = m_endFrame = end;
m_varLock.unlock();
sanitizeSettings();
}