2010-04-05 5 views
3

Je cherche à utiliser le CARingBuffer dans iPhone SDK 3.1 Developer \ Extras \ CoreAudio \ PublicUtility, mais était un peu perplexe à propos de certaines de ses méthodes. Tout d'abord, cela n'a de sens pour personne qui a utilisé cette classeCore Audio - CARIngBuffer

Par exemple, les fonctions GetTimebounds, SetTimeBounds, ClipTimeBounds fonctionnent réellement.

également lorsque vous l'utilisez, je reçois par exemple les accidents causés cette méthode dans la principale méthode Fetch

-> ZeroABL (ABL, 0, destStartOffset * mBytesPerFrame);

CARingBufferError CARingBuffer::Fetch(AudioBufferList *abl, UInt32 nFrames, SampleTime startRead) 
{ 
SampleTime endRead = startRead + nFrames; 

SampleTime startRead0 = startRead; 
SampleTime endRead0 = endRead; 
SampleTime size; 

CARingBufferError err = ClipTimeBounds(startRead, endRead); 
if (err) return err; 
size = endRead - startRead; 

SInt32 destStartOffset = startRead - startRead0; 
if (destStartOffset > 0) { 
    ZeroABL(abl, 0, destStartOffset * mBytesPerFrame); 
} 

Ici, le destStartOffset est devenu plus grand que la taille de la Bufferlist abl donc quand un memset est fait, il dépasse les limites du Bufferlist abl provoquant l'accident. Pourquoi cette classe n'a-t-elle pas été vérifiée pour éviter cela?

+0

J'ai récemment eu le même problème et je suis en utilisant la mise à jour QA1665. – sbooth

Répondre

Questions connexes