On Fri, Jun 17, 2016 at 8:32 AM, Anton Khirnov <an...@khirnov.net> wrote:
> Quoting Vittorio Giovara (2016-06-06 18:31:56)
>> From: Paul B Mahol <one...@gmail.com>
>>
>> +    s->slice_height = bytestream2_get_le32(&gbyte);
>> +    if ((s->slice_height <= 0) || (s->slice_height > INT_MAX - 
>> avctx->coded_height)) {
>> +        av_log(avctx, AV_LOG_ERROR,
>> +               "invalid slice height: %ld\n", s->slice_height);
>> +        return AVERROR_INVALIDDATA;
>> +    }
>> +
>> +    bytestream2_skip(&gbyte, 4);
>> +
>> +    s->nb_slices = (avctx->coded_height + s->slice_height - 1) / 
>> s->slice_height;
>
> You're not checking that the number of slices is larger than zero (or
> equivalently that the coded height is non-zero).
>
> Also, are the non-coded dimensions ever set?

No, I changed the code above this block to use ff_set_dimensions which
should address both points.

>> +    if (s->nb_slices > INT_MAX / sizeof(Slice)) {
>> +        av_log(avctx, AV_LOG_ERROR,
>> +               "invalid number of slices: %d\n", s->nb_slices);
>> +        return AVERROR_INVALIDDATA;
>> +    }
>> +
>> +    for (i = 0; i < s->planes; i++) {
>> +        av_fast_malloc(&s->slices[i], (unsigned *)&s->slices_size[i], 
>> s->nb_slices * sizeof(Slice));
>> +        if (!s->slices[i])
>> +            return AVERROR(ENOMEM);
>> +
>> +        offset = bytestream2_get_le32(&gbyte);
>> +        if (offset >= avpkt->size - header_size)
>> +            return AVERROR_INVALIDDATA;
>> +
>> +        if (i == 0)
>> +            first_offset = offset;
>> +
>> +        for (j = 0; j < s->nb_slices - 1; j++) {
>> +            s->slices[i][j].start = offset + header_size;
>> +            next_offset = bytestream2_get_le32(&gbyte);
>
> You should check that this is larger than the previous offset here. And
> probably move the check from the end of the loop here as well.

ok
-- 
Vittorio
_______________________________________________
libav-devel mailing list
libav-devel@libav.org
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to