[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