[MPlayer-dev-eng] [PATCH] Re: [BUG] Skipping in MPEG4 movie breaks mplayer

Uwe Reder uwe.reder at gmx.net
Tue Sep 9 02:36:56 CEST 2003


> > Skipping back past the start or skipping forward past the end of the
> > MPEG4 file in http://www.s1.hashmirror.com/navone/BB_story1_Web.mp4
> > breaks mplayer 1.0pre1.
> What does 'break' means?
Break means crash [sig 11]. mplayer crashes in the module 
"libmpdemux/demux_mov.c", function "demux_mov_fill_buffer()", calling 
memcpy() with a NULL pointer as the second argument. The code there looks 
somewhat like this:

if(trak->pos==0 && trak->stream_header_len>0){
  ...
  memcpy(..., trak->stream_header, ...)
  ...
  trak->stream_header = NULL
  ...
}

First time we come through here, we set stream_header = NULL. If pos == 0 (I 
suppose true when I rewind the stream past the beginning of the video) we 
check for stream_header_len > 0 which was not reset. We end up calling 
memcpy() with a NULL-pointer. IMHO, I think we should check for stream_header 
!= NULL or set stream_header_len = 0.

This is a patch that solves the problem for me:

--- snip snip ---

2003-09-09 01:45 diff -laur libmpdemux/demux_mov.c.orig libmpdemux/demux_mov.c 
Page 1

--- libmpdemux/demux_mov.c.orig 2003-09-09 01:22:38.000000000 +0200
+++ libmpdemux/demux_mov.c      2003-09-09 01:45:03.000000000 +0200
@@ -1670,6 +1670,7 @@
     stream_read(demuxer->stream,dp->buffer+trak->stream_header_len,x);
     free(trak->stream_header);
     trak->stream_header = NULL;
+    trak->stream_header_len = 0;
     dp->pts=pts;
     dp->flags=0;
     dp->pos=pos; // FIXME?

--- snip snip ---

Alex, thanks for your support!

Bye,
Uwe.




More information about the MPlayer-dev-eng mailing list