summaryrefslogtreecommitdiff
path: root/libavcodec/cuviddec.c
diff options
context:
space:
mode:
authorZhao Zhili <zhilizhao@tencent.com>2022-06-24 22:42:01 +0800
committerTimo Rothenpieler <timo@rothenpieler.org>2022-06-26 21:44:12 +0200
commit07bcedc232feeb9e30336624f4e9977d47ac43bc (patch)
treeaf3a0d3e6e70045ab56316dc3695b8c90b3e9f5e /libavcodec/cuviddec.c
parentffc91940a4262f605cb650c93e52a657090ae148 (diff)
avcodec/cuviddec: fix null pointer dereference
It can happened on error path of cuvid_decode_init(). Signed-off-by: Timo Rothenpieler <timo@rothenpieler.org>
Diffstat (limited to 'libavcodec/cuviddec.c')
-rw-r--r--libavcodec/cuviddec.c20
1 files 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;