[Tremor] ov_read is reading past file size

Stephen Damm shinhalsafar at gmail.com
Sat Jun 9 17:11:41 PDT 2012


I have a wav file which has been converted to an ogg file with libvorbis 
via ffmpeg.  However I've tested a few files just to make sure.

I run a standard while loop to using ov_read to pull all the data out of 
ogg file.  Using 4096 as the size to read each call.  Watching my debug 
logs it is reading 2048 bytes each call.

When I load the wav file the data chunk for the pcm data is 167680 
bytes.  Running the file in audacity proves this size to be accurate.

When I load the ogg file, ov_read goes past that size ending on 168320 
bytes, which causes some memory corruption further down in the program.

If I force the while loop running ov_read to stop one read before, 
166272 bytes, then everything is fine except the sound clip cuts off a 
few samples early.  If I let it do the final ov_read call it attempts to 
read up to 168320 bytes, which is past what the PCM data actually is and 
the allocated buffer size.

unsigned int uiPCMSamples = (unsigned int)ov_pcm_total(&vf, -1);
unsigned int totalPCMSize = uiPCMSamples * vi->channels * sizeof(short);

This yields 167680 bytes, so tremor knows how much PCM data there is.  
However ov_read is just going ahead and skipping past all this.


         int current_section = 0;
         long iRead = 0;
         unsigned int uiCurrPos = 0;
         do
         {
             iRead = ov_read(&vf, (char*)pvPCMBuffer + uiCurrPos, 4096, 
&current_section);
             uiCurrPos += (unsigned int)iRead;
         }
         while (iRead != 0);


I've tried everything assuming I'm the cause of the problem.  Although 
now I am leaning on tremor having an issue.


Thanks,
Stephen Damm


More information about the Tremor mailing list