[MPlayer-users] [patch] mplayer segfaults at the end of FLV movies
    Dennis Schneider 
    dschneid at informatik.hu-berlin.de
       
    Mon Jun 22 09:58:28 CEST 2009
    
    
  
Hi.
I'm using mplayer r29371 right now on FreeBSD with malloc debugging 
enabled.
Mplayer is really nice, but when playing FLV movies (downloaded from 
youtube, e.g) it exits with a SIGSEGV at the end of the movie.  Because 
FreeBSD malloc says:
	Assertion failed: (diff == regind * size), function 
	arena_run_reg_dalloc, file /usr/src/lib/libc/stdlib/malloc.c, line 
	2536.
A stacktrace shows that free() is called via av_free() from av_freep() 
in libmpcodecs/vd_ffmpeg.c:440:
	av_freep(&avctx->palctrl);
Digging deeper, I found that it only occured with CONFIG_MEMALIGN_HACK 
enabled (the default on this platform), but this is only hiding the 
problem.
The cause sits also in libmpcodecs/vd_ffmpeg.c, line 389:
	avctx->palctrl = calloc(1, sizeof(AVPaletteControl));
Which is clearly wrong since it is freed with the align-correcting 
av_free(p).
Could somebody please fix this, e.g. with the patch below?
Index: libmpcodecs/vd_ffmpeg.c
===================================================================
--- libmpcodecs/vd_ffmpeg.c	(Revision 29371)
+++ libmpcodecs/vd_ffmpeg.c	(Arbeitskopie)
@@ -386,7 +386,7 @@
      }
      /* Pass palette to codec */
      if (sh->bih && (sh->bih->biBitCount <= 8)) {
-        avctx->palctrl = calloc(1, sizeof(AVPaletteControl));
+        avctx->palctrl = av_malloc(sizeof(AVPaletteControl));
				 avctx->palctrl->palette_changed = 1;
          if (sh->bih->biSize-sizeof(BITMAPINFOHEADER))
              /* Palette size in biSize */
Please Cc me since I am not subscribed to this list.
Dennis
    
    
More information about the MPlayer-users
mailing list