On Mon, Feb 10, 2014 at 08:39:59AM +0100, Christophe Gisquet wrote:
> Hi,
>
> 2014-02-10 6:42 GMT+01:00 Kostya Shishkov <[email protected]>:
> > On Sun, Feb 09, 2014 at 11:21:33PM +0100, Christophe Gisquet wrote:
> >> + if(s->cdlms[c][i].order & 8) {
> >> + static int warned;
> >> + if(!warned)
> >> + avpriv_request_sample(s->avctx, "CDLMS of order %d",
> >> + s->cdlms[c][i].order);
> >> + warned = 1;
> >> + }
> >
> > & 7 maybe ?
>
> You can't see that in the diff, but just above, we have:
> s->cdlms[c][i].order = (get_bits(&s->gb, 7) + 1) * 8;
>
> What you suggest is still valid, and would catch things even if they
> changed, though.
Maybe it's not worth warning about it at all.
> >> + for (i = 0; i < s->cdlms_ttl[c]; i++) {
> >> + memset(s->cdlms[c][i].coefs + s->cdlms[c][i].order, 0,
> >> + (s->cdlms[c][i].order & (WMALL_COEFF_PAD_SIZE-1))
> >
> > wouldn't that be too much on large orders (e.g. order = 15)?
> > I'd simply zero to the end of coefs array.
>
> Hum right, these lines are wrong on so many levels... Strange it
> didn't trigger any crash, actually.
>
> Seeing the conditions for this to trigger, I'm tempted then to just write:
> // pad the coeff buffers with 0s up to a 16-aligned position
> for (i = 0; i < s->cdlms_ttl[c]; i++)
> if(s->cdlms[c][i].order & 8)
> AV_ZERO128(s->cdlms[c][i].coefs + s->cdlms[c][i].order);
>
>
> That's the problem when there's no sample that may trigger it (except
> crafted ones).
I'd simply zero all coeffs before decoding but that's me.
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel