From 2475fdbd047d8956b03f1bfb1e3f896985fd8c7f Mon Sep 17 00:00:00 2001 From: Lukasz Marek Date: Tue, 4 Mar 2014 02:57:27 +0100 Subject: [PATCH] lavd/avdevice: always free detected devices on error Signed-off-by: Lukasz Marek --- libavdevice/avdevice.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libavdevice/avdevice.c b/libavdevice/avdevice.c index 8964b96f36..ea14c7a286 100644 --- a/libavdevice/avdevice.c +++ b/libavdevice/avdevice.c @@ -101,6 +101,7 @@ int avdevice_dev_to_app_control_message(struct AVFormatContext *s, enum AVDevToA int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list) { + int ret; av_assert0(s); av_assert0(device_list); av_assert0(s->oformat || s->iformat); @@ -113,8 +114,12 @@ int avdevice_list_devices(AVFormatContext *s, AVDeviceInfoList **device_list) if (!(*device_list)) return AVERROR(ENOMEM); if (s->oformat) - return s->oformat->get_device_list(s, *device_list); - return s->iformat->get_device_list(s, *device_list); + ret = s->oformat->get_device_list(s, *device_list); + else + ret = s->iformat->get_device_list(s, *device_list); + if (ret < 0) + avdevice_free_list_devices(device_list); + return ret; } void avdevice_free_list_devices(AVDeviceInfoList **device_list)