mad: ensure we do not confuse the base class with our buffer guard
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Tue, 31 Jan 2012 15:52:38 +0000 (15:52 +0000)
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Tue, 31 Jan 2012 15:52:38 +0000 (15:52 +0000)
mad expects extra bytes at the end of a buffer (see discussion in
http://www.mars.org/mailman/public/mad-dev/2001-May/000262.html),
and since we inject these without the base class' knowledge, we
need to hide the bodies better.

This fixes an assert at EOS when decoding an mp3 manually without
an intervening mpegaudioparse.

ext/mad/gstmad.c

index bff7634..8336638 100644 (file)
@@ -415,6 +415,17 @@ exit:
   *_offset = offset;
   *len = consumed;
 
+  /* ensure that if we added some dummy guard bytes above, we don't claim
+     to have used them as they're unknown to the caller. */
+  if (mad->eos) {
+    g_assert (av >= MAD_BUFFER_GUARD);
+    av -= MAD_BUFFER_GUARD;
+    if (*_offset > av)
+      *_offset = av;
+    if (*len > av)
+      *len = av;
+  }
+
   return ret;
 }