[vlc-devel] [vlc-commits] mpeg4audio: Fix a crash with some invalid streams.

Hugo Beauzée-Luyssen beauze.h at gmail.com
Tue Apr 17 14:34:01 CEST 2012


On Tue, Apr 17, 2012 at 2:32 PM, Hugo Beauzée-Luyssen <git at videolan.org> wrote:
> vlc | branch: master | Hugo Beauzée-Luyssen <beauze.h at gmail.com> | Tue Apr 17 14:29:35 2012 +0200| [f5bc59c5a6f1b63d6468ba2d483252ecc6010801] | committer: Hugo Beauzée-Luyssen
>
> mpeg4audio: Fix a crash with some invalid streams.
>
> If rate stays at 0, a FPE will be raised in SetupOutput.
>
>> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f5bc59c5a6f1b63d6468ba2d483252ecc6010801
> ---
>
>  modules/packetizer/mpeg4audio.c |   23 +++++++++++++----------
>  1 files changed, 13 insertions(+), 10 deletions(-)
>
> diff --git a/modules/packetizer/mpeg4audio.c b/modules/packetizer/mpeg4audio.c
> index 03257f7..29c441b 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 */
>

I'm not sure this is the good way of doing it... therefore feel free
to revert if it's not.

Regards,

-- 
Hugo Beauzée-Luyssen


More information about the vlc-devel mailing list