]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/cuviddec: avoid copy of uninitialized extradata pointer
authorTimo Rothenpieler <timo@rothenpieler.org>
Thu, 1 Oct 2020 19:09:34 +0000 (21:09 +0200)
committerTimo Rothenpieler <timo@rothenpieler.org>
Thu, 1 Oct 2020 19:28:55 +0000 (21:28 +0200)
libavcodec/cuviddec.c

index aab6d00c8ded2d9f2e448fe2dcc2cd4c6943b99d..2d6377bc8c6d9db54e78c7c032d12448a8a33ea0 100644 (file)
@@ -795,7 +795,7 @@ static av_cold int cuvid_decode_init(AVCodecContext *avctx)
     CUcontext cuda_ctx = NULL;
     CUcontext dummy;
     uint8_t *extradata;
-    ssize_t extradata_size;
+    int extradata_size;
     int ret = 0;
 
     enum AVPixelFormat pix_fmts[3] = { AV_PIX_FMT_CUDA,
@@ -949,20 +949,21 @@ static av_cold int cuvid_decode_init(AVCodecContext *avctx)
         const AVCodecParameters *par = avctx->internal->bsf->par_out;
         extradata = par->extradata;
         extradata_size = par->extradata_size;
-    } else if (avctx->extradata_size > 0) {
+    } else {
         extradata = avctx->extradata;
         extradata_size = avctx->extradata_size;
     }
 
     ctx->cuparse_ext = av_mallocz(sizeof(*ctx->cuparse_ext)
-            + FFMAX(extradata_size - (ssize_t)sizeof(ctx->cuparse_ext->raw_seqhdr_data), 0));
+            + FFMAX(extradata_size - (int)sizeof(ctx->cuparse_ext->raw_seqhdr_data), 0));
     if (!ctx->cuparse_ext) {
         ret = AVERROR(ENOMEM);
         goto error;
     }
 
+    if (extradata_size > 0)
+        memcpy(ctx->cuparse_ext->raw_seqhdr_data, extradata, extradata_size);
     ctx->cuparse_ext->format.seqhdr_data_length = extradata_size;
-    memcpy(ctx->cuparse_ext->raw_seqhdr_data, extradata, extradata_size);
 
     ctx->cuparseinfo.pExtVideoInfo = ctx->cuparse_ext;