From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 69F0A4CD1C for ; Sat, 9 Aug 2025 03:10:12 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id B8CE068CD75; Sat, 9 Aug 2025 06:10:07 +0300 (EEST) Received: from mail-io1-f51.google.com (mail-io1-f51.google.com [209.85.166.51]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id 2378068BABF for ; Sat, 9 Aug 2025 06:10:01 +0300 (EEST) Received: by mail-io1-f51.google.com with SMTP id ca18e2360f4ac-87c0166df31so162107139f.3 for ; Fri, 08 Aug 2025 20:10:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754708999; x=1755313799; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=wjNYgJSZwhfhFib7wMNtHXA/hJ5V/AGtkKnL53CEsp8=; b=RizwlAW5McEdCgMj6OhNHj7iAWyROJaoTLXkv8Dz0Ad73I2OOkS1yal6qlH030VVIP Z5JmHVc0E4PUGZGjjw/O0+hP+yyFfrwSGylHxLa3QyqZXYPMhAOOCSA63hHKkr4PnSkR hcW7pOuuCfGwlEAEGnPJLygycuqk2eJcl0OiEXI7/1S3qReH3XRzeHSC3jVs7kxxvgC/ +iBEW4Vldl3G7krHSGjW83OvS77noYlqT397no2ukFl+cXF8LyhRioYgj1BlUdoiOPOW P9ksqMTjA94vesR8iECJ2SFZAUC7+YJ39hzYzStmXuacPuiAqljIPaWGCwrfRR97WiRO Y5ig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754708999; x=1755313799; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=wjNYgJSZwhfhFib7wMNtHXA/hJ5V/AGtkKnL53CEsp8=; b=beXWAgOuzLUiQARy4GUDVJN/ZyKo1CdsJX8wUuDDrlIydFKLFkLGKxsQHSjIM3ZO/m SWM9cgPh92CnqN7rhhQ0gFw+I4pazQVMdYSVG2d+V8tnDzwbC8ZXLcm2QKWk8owNlum7 l4T5A2GXbs+eBofGBEytrws8Jhr0V0wJJiaBz3xFKlh2wyK6ax/DoZP0mUvoSOkpWtyr ydsqGxt+08xrO2AA052TsmQ4wcfKLein7xSpvB/q1Gm7MS62my5RmcEN6VsryNB9Yblx +ArJR37A55whPT1HNKLMQYF6oj5hjNGTi6QVL8ErvnbjATfgRHGCBBDoLvvtr4qThSIN Zo9Q== X-Gm-Message-State: AOJu0YxSLWhJsO70jgXwCwDcQeRxyr3lgff5+SuxVM8e5Z57TvKlPtI6 kB4tSF8pOoyvc/L/CAol2NPlY769b2zSLJRDCHBmRTqKbZ5crrQNL+mmDzLXlA== X-Gm-Gg: ASbGncskF9Xh6Yyui14OVZERn1+NFqIiGpU1if9jgc0F0xxYrI1rnbaY2onVS2ajymL vgFbsP+uRQMIIuTE/OeVTybAUVOPCY7WyYfSKC+R8J3FfkuSAvPDXnVq+z1Jtj262Jy4ToAS/tX UZCW6BipLXoGbBGVwazjhbNid2oEhlNjXZyoZRfN6lYx4t8ylKvub7n6q0+k9hAd5Bfay2b1fWM yvSS78fik2Pu+ufiUV4VeTd8PmxWfJigHjChuiafaGUHkv7TfnKcaEbv1MMKAx9z3LbIfDmUf2y OxI3afEG9f/hx/wsFTKI6uRmGQ84RcoWunNgEzfbEknIP+3EVdL8WpSljiz0UkEwfmHEx6IkR4s qXYtC9Y+4mB3K1E60mtfTOOZ/jHWfICNPXMCt8rNFKQ/l X-Google-Smtp-Source: AGHT+IHGSebVD4GaZw+n9YoVXMbNbfTn33hsEhRxYF+gG/HgHIMdpJrHMRJbvYOfXPWm0kE5u/O3og== X-Received: by 2002:a05:6602:634d:b0:87c:30d4:65f2 with SMTP id ca18e2360f4ac-883f11b4737mr875071939f.3.1754708998937; Fri, 08 Aug 2025 20:09:58 -0700 (PDT) Received: from newman.cs.purdue.edu ([128.10.127.250]) by smtp.gmail.com with ESMTPSA id ca18e2360f4ac-883f19c1475sm103108339f.29.2025.08.08.20.09.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 20:09:57 -0700 (PDT) From: Jiasheng Jiang To: ffmpeg-devel@ffmpeg.org Date: Sat, 9 Aug 2025 03:09:53 +0000 Message-Id: <20250809030953.25631-1-jiashengjiangcool@gmail.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] tools/graph2dot: Add proper error handling to avoid potential memory leaks X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Jiasheng Jiang Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: 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 --- 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".