Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH] tools/graph2dot: Add proper error handling to avoid potential memory leaks
@ 2025-08-09  3:09 Jiasheng Jiang
  0 siblings, 0 replies; only message in thread
From: Jiasheng Jiang @ 2025-08-09  3:09 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Jiasheng Jiang

Add proper error handling to release allocated memory to avoid potential memory leaks.

Fixes: 11ab237e31 ("Add the graph2dot tools and document it.")
Signed-off-by: Jiasheng Jiang <jiashengjiangcool@gmail.com>
---
 tools/graph2dot.c | 52 ++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 42 insertions(+), 10 deletions(-)

diff --git a/tools/graph2dot.c b/tools/graph2dot.c
index d96bfd8126..135c1d25b1 100644
--- a/tools/graph2dot.c
+++ b/tools/graph2dot.c
@@ -114,6 +114,7 @@ int main(int argc, char **argv)
     char *graph_string      = NULL;
     AVFilterGraph *graph    = NULL;
     char c;
+    int ret = 0;
 
     av_log_set_level(AV_LOG_DEBUG);
 
@@ -148,7 +149,8 @@ int main(int argc, char **argv)
     if (!outfile) {
         fprintf(stderr, "Failed to open output file '%s': %s\n",
                 outfilename, strerror(errno));
-        return 1;
+        ret = 1;
+        goto fclose_infile;
     }
 
     /* read from infile and put it in a buffer */
@@ -159,25 +161,29 @@ int main(int argc, char **argv)
         last_line = first_line = av_malloc(sizeof(struct line));
         if (!last_line) {
             fprintf(stderr, "Memory allocation failure\n");
-            return 1;
+            ret = 1;
+            goto fclose_outfile;
         }
 
+        last_line->next = NULL;
         while (fgets(last_line->data, sizeof(last_line->data), infile)) {
             struct line *new_line = av_malloc(sizeof(struct line));
             if (!new_line) {
                 fprintf(stderr, "Memory allocation failure\n");
-                return 1;
+                ret = 1;
+                goto free_lines;
             }
             count += strlen(last_line->data);
             last_line->next = new_line;
             last_line       = new_line;
+            last_line->next = NULL;
         }
-        last_line->next = NULL;
 
         graph_string = av_malloc(count + 1);
         if (!graph_string) {
             fprintf(stderr, "Memory allocation failure\n");
-            return 1;
+            ret = 1;
+            goto free_lines;
         }
         p = graph_string;
         for (line = first_line; line->next; line = line->next) {
@@ -186,24 +192,50 @@ int main(int argc, char **argv)
             p += l;
         }
         *p = '\0';
+
+free_lines:
+        line = first_line;
+        while (line) {
+            struct line *next = line->next;
+            av_free(line);
+            line = next;
+        }
+        if (ret)
+            goto free_graph_string;
     }
 
     graph = avfilter_graph_alloc();
     if (!graph) {
         fprintf(stderr, "Memory allocation failure\n");
-        return 1;
+        ret = 1;
+        goto free_graph_string;
     }
 
     if (avfilter_graph_parse(graph, graph_string, NULL, NULL, NULL) < 0) {
         fprintf(stderr, "Failed to parse the graph description\n");
-        return 1;
+        ret = 1;
+        goto free_graph;
     }
 
-    if (avfilter_graph_config(graph, NULL) < 0)
-        return 1;
+    if (avfilter_graph_config(graph, NULL) < 0) {
+        ret = 1;
+        goto free_graph;
+    }
 
     print_digraph(outfile, graph);
     fflush(outfile);
 
-    return 0;
+    ret = 0;
+
+free_graph:
+    avfilter_graph_free(&graph);
+free_graph_string:
+    if (graph_string)
+        av_free(graph_string);
+fclose_outfile:
+    fclose(outfile);
+fclose_infile:
+    fclose(infile);
+
+    return ret;
 }
-- 
2.25.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-08-09  3:10 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-08-09  3:09 [FFmpeg-devel] [PATCH] tools/graph2dot: Add proper error handling to avoid potential memory leaks Jiasheng Jiang

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git