speexdec: Always process the number of frames per packet as specified in the header
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 14 Mar 2011 18:28:07 +0000 (19:28 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 14 Mar 2011 18:31:33 +0000 (19:31 +0100)
Looking at the remaining bits in the bitstream after decoding a
single frame can't be used as loop condition. The remaining
bits might not give a complete frame and the speex decoder will
then output nothing but access uninitialized memory, which leads
to valgrind warnings.

Fixes bug #644669.

ext/speex/gstspeexdec.c

index ef2300f..c866ef8 100644 (file)
@@ -662,7 +662,7 @@ speex_dec_chain_parse_data (GstSpeexDec * dec, GstBuffer * buf,
     /* send data to the bitstream */
     speex_bits_read_from (&dec->bits, (char *) data, size);
 
-    fpp = 0;
+    fpp = dec->header->frames_per_packet;
     bits = &dec->bits;
 
     GST_DEBUG_OBJECT (dec, "received buffer of size %u, fpp %d", size, fpp);
@@ -675,8 +675,7 @@ speex_dec_chain_parse_data (GstSpeexDec * dec, GstBuffer * buf,
 
 
   /* now decode each frame, catering for unknown number of them (e.g. rtp) */
-  for (i = 0; (!fpp || i < fpp) && (!bits || speex_bits_remaining (bits) > 0);
-      i++) {
+  for (i = 0; i < fpp; i++) {
     GstBuffer *outbuf;
     gint16 *out_data;
     gint ret;