[Vorbis-dev] buffer overruns for small files

Steve Russell srussell at innernet.net
Mon Nov 7 17:51:28 PST 2005


Oops -- I said that wrong.  dwBufferLength is not the allocated length.

int pcmTotal = ov_pcm_total(&vf, -1);
int BufferSize = pcmTotal * vi->channels * 2;
----- Original Message ----- 
From: "Steve Russell" <srussell at innernet.net>
To: "Ian Malone" <ibm21 at cam.ac.uk>; <vorbis-dev at xiph.org>
Sent: Monday, November 07, 2005 8:46 PM
Subject: Re: [Vorbis-dev] buffer overruns for small files


> dwBufferLength is the allocated length.
>
>  long bytes_read = ov_read(&vf, m_lpDataVorbis + dwBufferLength, 4096, 0, 
> 2, 1, &current_section);
>  if(bytes_read == 0)
>  {
>   // EOF
>   eof = 1;
>  }
>  else
>   dwBufferLength += bytes_read;
>
> As to trying example decoders, every time I try to compile something for a 
> test, I run into at least one mysterious hangup.  I guess it's related to 
> Windows; maybe I simply lack some very pertinent knowledge.  Same for 
> Speex. In regard to vorbis_synthesis, where exactly would I place a TRACE? 
> in what file?
> ----- Original Message ----- 
> From: "Ian Malone" <ibm21 at cam.ac.uk>
> To: <vorbis-dev at xiph.org>
> Sent: Sunday, November 06, 2005 8:34 AM
> Subject: Re: [Vorbis-dev] buffer overruns for small files
>
>
>> Not a clue, but since this hasn't been picked up:
>> How do the reference and example decoders handle these files?
>> Is dwBufferLength the allocated length or the attempted write
>> length?  Can you trace into vorbis_synthesis and see how
>> much is being allocated?
>>
>> imalone
>>
>>
>> Steve Russell wrote:
>>> I wonder if anyone would have a comment on an experiment I have pretty 
>>> much completed in my MFC/C++ project.  With my simple libvorbis 
>>> implementation, ogg decoding works just fine for files that are 10kb or 
>>> larger.  For anything smaller (actually, I don't have a 9kb file, so <= 
>>> 8), it seems that I get an inaccurate value for ov_pcm_total.  Though 
>>> ov_read returns zero, I overflow the buffer and crash on ov_clear. 
>>> These are my TRACE statements:
>>>
>>>
>>>>= 10kb:
>>>
>>>
>>> Opening Audio File 'no_0.ogg'
>>> vi->channels = '2'
>>> vi->rate = '44100'
>>> pcmTotal = '15341'
>>> pcmTotal * vi->channels * 2 = '61364'
>>> BufferSize = '61364'
>>> dwBufferLength = '61364'
>>> BufferSize = '61364'
>>> dwBufferLength - BufferSize = '0'
>>> ------------
>>> < 10kb:
>>>
>>> Opening Audio File 'Steel guitar_4.ogg'
>>> vi->channels = '2'
>>> vi->rate = '44100'
>>> pcmTotal = '9876'
>>> pcmTotal * vi->channels * 2 = '39504'
>>> BufferSize = '39504'
>>> dwBufferLength = '43264'
>>> BufferSize = '39504'
>>> dwBufferLength - BufferSize = '3760'
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> Vorbis-dev mailing list
>>> Vorbis-dev at xiph.org
>>> http://lists.xiph.org/mailman/listinfo/vorbis-dev
>>
>> _______________________________________________
>> Vorbis-dev mailing list
>> Vorbis-dev at xiph.org
>> http://lists.xiph.org/mailman/listinfo/vorbis-dev
>
> _______________________________________________
> Vorbis-dev mailing list
> Vorbis-dev at xiph.org
> http://lists.xiph.org/mailman/listinfo/vorbis-dev
> 



More information about the Vorbis-dev mailing list