diff options
author | Timo Rothenpieler <timo@rothenpieler.org> | 2020-10-01 21:09:34 +0200 |
---|---|---|
committer | Timo Rothenpieler <timo@rothenpieler.org> | 2020-10-01 21:28:55 +0200 |
commit | 13c74291ecfb9a080b37c796b1e10ccd3e5b413e (patch) | |
tree | e0448fedf7578797e4253e39f22fdc42808c9fc3 /libavcodec/cuviddec.c | |
parent | c75756d0473de38c3d41596ed3b7361de93ede7c (diff) | |
download | ffmpeg-13c74291ecfb9a080b37c796b1e10ccd3e5b413e.tar.gz |
avcodec/cuviddec: avoid copy of uninitialized extradata pointer
Diffstat (limited to 'libavcodec/cuviddec.c')
-rw-r--r-- | libavcodec/cuviddec.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c index aab6d00c8d..2d6377bc8c 100644 --- a/libavcodec/cuviddec.c +++ b/libavcodec/cuviddec.c @@ -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; |