From f5bc59c5a6f1b63d6468ba2d483252ecc6010801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Tue, 17 Apr 2012 14:29:35 +0200 Subject: [PATCH] mpeg4audio: Fix a crash with some invalid streams. If rate stays at 0, a FPE will be raised in SetupOutput. --- modules/packetizer/mpeg4audio.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/modules/packetizer/mpeg4audio.c b/modules/packetizer/mpeg4audio.c index 03257f7258..29c441b25b 100644 --- a/modules/packetizer/mpeg4audio.c +++ b/modules/packetizer/mpeg4audio.c @@ -807,20 +807,23 @@ static int LOASParse( decoder_t *p_dec, uint8_t *p_buffer, int i_buffer ) p_sys->i_rate = st->cfg.i_samplerate; p_sys->i_frame_length = st->cfg.i_frame_length; - /* FIXME And if it changes ? */ - if( !p_dec->fmt_out.i_extra && st->i_extra > 0 ) + if ( p_sys->i_channels > 0 && p_sys->i_rate > 0 && + p_sys->i_frame_length > 0 ) { - p_dec->fmt_out.i_extra = st->i_extra; - p_dec->fmt_out.p_extra = malloc( st->i_extra ); - if( !p_dec->fmt_out.p_extra ) + /* FIXME And if it changes ? */ + if( !p_dec->fmt_out.i_extra && st->i_extra > 0 ) { - p_dec->fmt_out.i_extra = 0; - return 0; + p_dec->fmt_out.i_extra = st->i_extra; + p_dec->fmt_out.p_extra = malloc( st->i_extra ); + if( !p_dec->fmt_out.p_extra ) + { + p_dec->fmt_out.i_extra = 0; + return 0; + } + memcpy( p_dec->fmt_out.p_extra, st->extra, st->i_extra ); } - memcpy( p_dec->fmt_out.p_extra, st->extra, st->i_extra ); + p_sys->b_latm_cfg = true; } - - p_sys->b_latm_cfg = true; } } /* Wait for the configuration */