aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarvin Scholz <epirat07@gmail.com>2024-09-12 04:58:38 +0200
committerMarton Balint <cus@passwd.hu>2024-09-29 10:12:41 +0200
commit8e76c993013d6dd9382774d1716d8fe2421c42bd (patch)
tree6d3d4c2dc3a81f50b77f9d5696ea8912a201e71e
parent7554346cb5cf6e8863da12f9d56e300b08d6cc23 (diff)
downloadffmpeg-8e76c993013d6dd9382774d1716d8fe2421c42bd.tar.gz
avdevice/decklink_dec: fix leaks on error
In case of errors in this function, the allocated context was not properly freed in several cases. Signed-off-by: Marton Balint <cus@passwd.hu>
-rw-r--r--libavdevice/decklink_dec.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/libavdevice/decklink_dec.cpp b/libavdevice/decklink_dec.cpp
index 9a817daf18..418701e4e0 100644
--- a/libavdevice/decklink_dec.cpp
+++ b/libavdevice/decklink_dec.cpp
@@ -1114,7 +1114,8 @@ av_cold int ff_decklink_read_header(AVFormatContext *avctx)
break;
default:
av_log(avctx, AV_LOG_ERROR, "Value of channels option must be one of 2, 8 or 16\n");
- return AVERROR(EINVAL);
+ ret = AVERROR(EINVAL);
+ goto error;
}
/* Check audio bit depth option for valid values: 16 or 32 */
@@ -1124,18 +1125,20 @@ av_cold int ff_decklink_read_header(AVFormatContext *avctx)
break;
default:
av_log(avctx, AV_LOG_ERROR, "Value for audio bit depth option must be either 16 or 32\n");
- return AVERROR(EINVAL);
+ ret = AVERROR(EINVAL);
+ goto error;
}
/* List available devices. */
if (ctx->list_devices) {
ff_decklink_list_devices_legacy(avctx, 1, 0);
- return AVERROR_EXIT;
+ ret = AVERROR_EXIT;
+ goto error;
}
ret = ff_decklink_init_device(avctx, avctx->url);
if (ret < 0)
- return ret;
+ goto error;
/* Get input device. */
if (ctx->dl->QueryInterface(IID_IDeckLinkInput, (void **) &ctx->dli) != S_OK) {
@@ -1336,6 +1339,7 @@ av_cold int ff_decklink_read_header(AVFormatContext *avctx)
error:
ff_decklink_cleanup(avctx);
+ av_freep(&cctx->ctx);
return ret;
}