[FFmpeg-cvslog] avcodec/cuviddec: fix null pointer dereference
Zhao Zhili
git at videolan.org
Sun Jun 26 22:49:31 EEST 2022
ffmpeg | branch: master | Zhao Zhili <zhilizhao at tencent.com> | Fri Jun 24 22:42:01 2022 +0800| [07bcedc232feeb9e30336624f4e9977d47ac43bc] | committer: Timo Rothenpieler
avcodec/cuviddec: fix null pointer dereference
It can happened on error path of cuvid_decode_init().
Signed-off-by: Timo Rothenpieler <timo at rothenpieler.org>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=07bcedc232feeb9e30336624f4e9977d47ac43bc
---
libavcodec/cuviddec.c | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c
index 5f265b1c70..b544b3361d 100644
--- a/libavcodec/cuviddec.c
+++ b/libavcodec/cuviddec.c
@@ -655,21 +655,23 @@ error:
static av_cold int cuvid_decode_end(AVCodecContext *avctx)
{
CuvidContext *ctx = avctx->priv_data;
- AVHWDeviceContext *device_ctx = (AVHWDeviceContext *)ctx->hwdevice->data;
- AVCUDADeviceContext *device_hwctx = device_ctx->hwctx;
- CUcontext dummy, cuda_ctx = device_hwctx->cuda_ctx;
+ AVHWDeviceContext *device_ctx = ctx->hwdevice ? (AVHWDeviceContext *)ctx->hwdevice->data : NULL;
+ AVCUDADeviceContext *device_hwctx = device_ctx ? device_ctx->hwctx : NULL;
+ CUcontext dummy, cuda_ctx = device_hwctx ? device_hwctx->cuda_ctx : NULL;
av_fifo_freep2(&ctx->frame_queue);
- ctx->cudl->cuCtxPushCurrent(cuda_ctx);
+ if (cuda_ctx) {
+ ctx->cudl->cuCtxPushCurrent(cuda_ctx);
- if (ctx->cuparser)
- ctx->cvdl->cuvidDestroyVideoParser(ctx->cuparser);
+ if (ctx->cuparser)
+ ctx->cvdl->cuvidDestroyVideoParser(ctx->cuparser);
- if (ctx->cudecoder)
- ctx->cvdl->cuvidDestroyDecoder(ctx->cudecoder);
+ if (ctx->cudecoder)
+ ctx->cvdl->cuvidDestroyDecoder(ctx->cudecoder);
- ctx->cudl->cuCtxPopCurrent(&dummy);
+ ctx->cudl->cuCtxPopCurrent(&dummy);
+ }
ctx->cudl = NULL;
More information about the ffmpeg-cvslog
mailing list