[FFmpeg-devel] [PATCH] avcodec/hevcdec: add some missing allocation checks

Nuo Mi nuomi2021 at gmail.com
Fri Feb 12 06:07:13 EET 2021


On Thu, Feb 11, 2021 at 11:49 PM James Almer <jamrial at gmail.com> wrote:

> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
>  libavcodec/hevcdec.c | 25 +++++++++++++++++++------
>  1 file changed, 19 insertions(+), 6 deletions(-)
>
> diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c
> index 898dac8cbb..325c7850e6 100644
> --- a/libavcodec/hevcdec.c
> +++ b/libavcodec/hevcdec.c
> @@ -515,6 +515,9 @@ static int set_sps(HEVCContext *s, const HEVCSPS *sps,
>              s->sao_pixel_buffer_v[c_idx] =
>                  av_malloc((h * 2 * sps->ctb_width) <<
>                            sps->pixel_shift);
> +            if (!s->sao_pixel_buffer_h[c_idx] ||
> +                !s->sao_pixel_buffer_v[c_idx])
> +                goto fail;
>          }
>      }
>
> @@ -525,6 +528,10 @@ static int set_sps(HEVCContext *s, const HEVCSPS *sps,
>
>  fail:
>      pic_arrays_free(s);
> +    for (i = 0; i < 3; i++) {
> +        av_freep(&s->sao_pixel_buffer_h[i]);
> +        av_freep(&s->sao_pixel_buffer_v[i]);
> +    }
>
We have the same code after ff_videodsp_init and the same code in
hevc_decode_free.
Could we define a function like free_sao_pixel_buffers for it?

>      s->ps.sps = NULL;
>      return ret;
>  }
> @@ -2624,13 +2631,19 @@ static int hls_slice_data_wpp(HEVCContext *s,
> const H2645NAL *nal)
>
>      ff_alloc_entries(s->avctx, s->sh.num_entry_point_offsets + 1);
>
> -    if (!s->sList[1]) {
> -        for (i = 1; i < s->threads_number; i++) {
> -            s->sList[i] = av_malloc(sizeof(HEVCContext));
> -            memcpy(s->sList[i], s, sizeof(HEVCContext));
> -            s->HEVClcList[i] = av_mallocz(sizeof(HEVCLocalContext));
> -            s->sList[i]->HEVClc = s->HEVClcList[i];
> +    for (i = 1; i < s->threads_number; i++) {
> +        if (s->sList[i] && s->HEVClcList[i])
> +            continue;
> +        av_freep(&s->sList[i]);
> +        av_freep(&s->HEVClcList[i]);
> +        s->sList[i] = av_malloc(sizeof(HEVCContext));
> +        s->HEVClcList[i] = av_mallocz(sizeof(HEVCLocalContext));
> +        if (!s->sList[i] || !s->HEVClcList[i]) {
> +            res = AVERROR_INVALIDDATA;
>
 AVERROR(ENOMEM) ?

> +            goto error;
>          }
> +        memcpy(s->sList[i], s, sizeof(HEVCContext));
> +        s->sList[i]->HEVClc = s->HEVClcList[i];
>      }
>
>      offset = (lc->gb.index >> 3);
> --
> 2.30.0
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".


More information about the ffmpeg-devel mailing list