[FFmpeg-devel] [PATCH 2/3] avcodec/bsf: fix resource leak in av_bsf_list_parse_str

Steven Liu lq at chinaffmpeg.org
Tue Jan 10 13:44:58 EET 2017


cid: 1396268
when av_strdup(str) error, the lst need release

Signed-off-by: Steven Liu <lq at chinaffmpeg.org>
---
 libavcodec/bsf.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/libavcodec/bsf.c b/libavcodec/bsf.c
index ac2024b..c9b1df2 100644
--- a/libavcodec/bsf.c
+++ b/libavcodec/bsf.c
@@ -514,8 +514,10 @@ int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf_lst)
     if (!lst)
         return AVERROR(ENOMEM);
 
-    if (!(dup = buf = av_strdup(str)))
-        return AVERROR(ENOMEM);
+    if (!(dup = buf = av_strdup(str))) {
+        ret = AVERROR(ENOMEM);
+        goto free_lst;
+    }
 
     while (1) {
         bsf_str = av_strtok(buf, ",", &saveptr);
@@ -524,16 +526,17 @@ int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf_lst)
 
         ret = bsf_parse_single(bsf_str, lst);
         if (ret < 0)
-            goto end;
+            goto free_all;
 
         buf = NULL;
     }
 
     ret = av_bsf_list_finalize(&lst, bsf_lst);
-end:
+free_all:
+    av_free(dup);
+free_lst:
     if (ret < 0)
         av_bsf_list_free(&lst);
-    av_free(dup);
     return ret;
 }
 
-- 
2.10.1.382.ga23ca1b.dirty





More information about the ffmpeg-devel mailing list