Hi!

> I was using mpegdemux to demux an mpeg stream I ripped from a dvd, when it
> started to malloc about 4 GB of memory and trashing my system.  A bit of
> investigation exposed an integer overflow in mpeg_demux.c.

Upon further debugging, I managed to find the real cause of the problem
(I think).  The issue is cause by the --ac3 option, which according to
the man page does the following:

|  AC3  sound  packets in DVD MPEG2 streams have a 3 byte header that is
|  neither part of the MPEG specification nor of the AC3 specification.
|  When this  option  is  used,  these  3 bytes  are removed to produce a
|  correct AC3 stream.

However, in the actual code, these 3 bytes are skipped not only for AC3
streams (stream id 0xbd, substream 0x80-x09f), but for _any_ private
substream (including, for example, vobsub subtitle streams).  

Here's an updated patch to fix this.  I kept the check for the integer
overflow in, as it might expose othe rbug in the code.

Please also send this patch upstream.


--- mpeg_demux.c.orig   2008-12-27 23:53:03.340719670 +0100
+++ mpeg_demux.c    2008-12-28 12:08:56.951720038 +0100
@@ -170,7 +172,7 @@
     fpi = 256 + ssid;
     cnt += 1;
 
-    if (par_dvdac3) {
+    if (par_dvdac3 && ssid >= 0x80 && ssid < 0xa0 ) {
       cnt += 3;
     }
   }
@@ -186,6 +188,13 @@
     mpegd_skip (mpeg, cnt);
   }
 
+  if ( cnt > mpeg->packet.size )
+  {
+    fprintf( stderr, "Whoopsie, count is less than packet size\n" );
+    fprintf( stderr, "broken MPEG stream bailing out\n" );
+    exit(1);
+  }
+
   cnt = mpeg->packet.size - cnt;
 
   if ((sid == 0xbd) && par_dvdsub) {


-- 
+--------------------------------------------------------------+
| Bas Zoetekouw      | Sweet day, so cool, so calm, so bright, |
|--------------------| The bridall of the earth and skie:      |
| b...@zoetekouw.net  | The dew shall weep thy fall tonight;    |
+--------------------|                    For thou must die.   |
                     +-----------------------------------------+



-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to