On Tue, May 05, 2015 at 10:39:50PM +0200, Andreas Cadhalpun wrote:
> In init_planes p->xblen and p->yblen are set to:
>             p->xblen = s->plane[0].xblen >> s->chroma_x_shift;
>             p->yblen = s->plane[0].yblen >> s->chroma_y_shift;
> 
> These are later used as block_w and block_h arguments of
> s->vdsp.emulated_edge_mc. If one of them is 0 it triggers an av_assert2
> in emulated_edge_mc:
>     av_assert2(start_x < end_x && block_w > 0);
>     av_assert2(start_y < end_y && block_h > 0);
> 
> Signed-off-by: Andreas Cadhalpun <andreas.cadhal...@googlemail.com>
> ---
>  libavcodec/diracdec.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/libavcodec/diracdec.c b/libavcodec/diracdec.c
> index adbe331..98f2ea9 100644
> --- a/libavcodec/diracdec.c
> +++ b/libavcodec/diracdec.c
> @@ -902,6 +902,10 @@ static int 
> dirac_unpack_prediction_parameters(DiracContext *s)
>      /*[DIRAC_STD] 11.2.4 motion_data_dimensions()
>        Calculated in function dirac_unpack_block_motion_data */
>  
> +    if (s->plane[0].xblen >> s->chroma_x_shift <= 0 || s->plane[0].yblen >> 
> s->chroma_y_shift <= 0) {
> +        av_log(s->avctx, AV_LOG_ERROR, "Block length too small\n");
> +        return -1;
> +    }

a broader check is possible
the spec says "Frame height shall be an integer multiple of picture chroma 
height."
in 10.5.1
ive not found an equivalent for width but from rounding the chroma
width down i doubt that the spec intends to allow non multiplies for
the width

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Breaking DRM is a little like attempting to break through a door even
though the window is wide open and the only thing in the house is a bunch
of things you dont want and which you would get tomorrow for free anyway

Attachment: signature.asc
Description: Digital signature

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to