OSDN Git Service

Plug some memory leaks
authorVitor Sessak <vitor1001@gmail.com>
Sat, 24 May 2008 20:42:26 +0000 (20:42 +0000)
committerVitor Sessak <vitor1001@gmail.com>
Sat, 24 May 2008 20:42:26 +0000 (20:42 +0000)
Commited in SoC by Vitor Sessak on 2008-05-24 17:15:18

Originally committed as revision 13357 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavfilter/graphparser.c

index 3883ae9..2a8a017 100644 (file)
@@ -144,8 +144,10 @@ static AVFilterContext *create_filter(AVFilterGraph *ctx, int index,
         return NULL;
     }
 
-    if(avfilter_graph_add_filter(ctx, filt) < 0)
+    if(avfilter_graph_add_filter(ctx, filt) < 0) {
+        avfilter_destroy(filt);
         return NULL;
+    }
 
     if(avfilter_init_filter(filt, args, NULL)) {
         av_log(log_ctx, AV_LOG_ERROR,
@@ -164,19 +166,24 @@ static AVFilterContext *parse_filter(const char **buf, AVFilterGraph *graph,
 {
     char *opts = NULL;
     char *name = consume_string(buf);
+    AVFilterContext *ret;
 
     if(**buf == '=') {
         (*buf)++;
         opts = consume_string(buf);
     }
 
-    return create_filter(graph, index, name, opts, log_ctx);
+    ret = create_filter(graph, index, name, opts, log_ctx);
+    av_free(name);
+    av_free(opts);
+    return ret;
 }
 
 static void free_inout(AVFilterInOut *head)
 {
     while(head) {
         AVFilterInOut *next = head->next;
+        av_free(head->name);
         av_free(head);
         head = next;
     }
@@ -222,6 +229,7 @@ static int link_filter_inouts(AVFilterContext *filter,
         if(p->filter) {
             if(link_filter(p->filter, p->pad_idx, filter, pad, log_ctx))
                 return -1;
+            av_free(p->name);
             av_free(p);
         } else {
             p->filter = filter;
@@ -318,6 +326,8 @@ static int parse_outputs(const char **buf, AVFilterInOut **currInputs,
             if(link_filter(input->filter, input->pad_idx,
                            match->filter, match->pad_idx, log_ctx) < 0)
                 return -1;
+            av_free(match->name);
+            av_free(name);
             av_free(match);
             av_free(input);
         } else {