* [FFmpeg-devel] [PATCH] examples: Replace with proper error handling to avoid potential memory errors
@ 2025-08-05 18:56 Jiasheng Jiang
2025-08-05 20:18 ` Nicolas George
0 siblings, 1 reply; 4+ messages in thread
From: Jiasheng Jiang @ 2025-08-05 18:56 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Jiasheng Jiang
Add check for the return valud of av_packet_alloc() to avoid potential NULL pointer dereference.
Moreover, replace with proper error handling to avoid potential memory leak.
Fixes: 9a38184a14 ("examples/decode_audio: allocate the packet dynamically")
Fixes: f5df897c4b ("examples/avcodec: split audio decoding into a separate example")
Signed-off-by: Jiasheng Jiang <jiashengjiangcool@gmail.com>
---
doc/examples/decode_audio.c | 39 +++++++++++++++++++++++++------------
1 file changed, 27 insertions(+), 12 deletions(-)
diff --git a/doc/examples/decode_audio.c b/doc/examples/decode_audio.c
index bcb3d87a69..7d9093c0e9 100644
--- a/doc/examples/decode_audio.c
+++ b/doc/examples/decode_audio.c
@@ -128,41 +128,48 @@ int main(int argc, char **argv)
outfilename = argv[2];
pkt = av_packet_alloc();
+ if (!pkt)
+ exit(1);
/* find the MPEG audio decoder */
codec = avcodec_find_decoder(AV_CODEC_ID_MP2);
if (!codec) {
fprintf(stderr, "Codec not found\n");
- exit(1);
+ ret = -1;
+ goto free_pkt;
}
parser = av_parser_init(codec->id);
if (!parser) {
fprintf(stderr, "Parser not found\n");
- exit(1);
+ ret = -1;
+ goto free_pkt;
}
c = avcodec_alloc_context3(codec);
if (!c) {
fprintf(stderr, "Could not allocate audio codec context\n");
- exit(1);
+ ret = -1;
+ goto close_parser;
}
/* open it */
if (avcodec_open2(c, codec, NULL) < 0) {
fprintf(stderr, "Could not open codec\n");
- exit(1);
+ ret = -1;
+ goto free_context;
}
f = fopen(filename, "rb");
if (!f) {
fprintf(stderr, "Could not open %s\n", filename);
- exit(1);
+ ret = -1;
+ goto free_context;
}
outfile = fopen(outfilename, "wb");
if (!outfile) {
- av_free(c);
- exit(1);
+ ret = -1;
+ goto fclose_f;
}
/* decode until eof */
@@ -173,7 +180,8 @@ int main(int argc, char **argv)
if (!decoded_frame) {
if (!(decoded_frame = av_frame_alloc())) {
fprintf(stderr, "Could not allocate audio frame\n");
- exit(1);
+ ret = -1;
+ goto fclose_outfile;
}
}
@@ -182,7 +190,7 @@ int main(int argc, char **argv)
AV_NOPTS_VALUE, AV_NOPTS_VALUE, 0);
if (ret < 0) {
fprintf(stderr, "Error while parsing\n");
- exit(1);
+ goto end;
}
data += ret;
data_size -= ret;
@@ -225,13 +233,20 @@ int main(int argc, char **argv)
fmt, n_channels, c->sample_rate,
outfilename);
end:
+ av_frame_free(&decoded_frame);
+fclose_outfile:
fclose(outfile);
+fclose_f:
fclose(f);
-
+free_context:
avcodec_free_context(&c);
+close_parser:
av_parser_close(parser);
- av_frame_free(&decoded_frame);
+free_pkt:
av_packet_free(&pkt);
+ if (ret < 0)
+ exit(1);
+
return 0;
-}
+}
\ No newline at end of file
--
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] 4+ messages in thread
* Re: [FFmpeg-devel] [PATCH] examples: Replace with proper error handling to avoid potential memory errors
2025-08-05 18:56 [FFmpeg-devel] [PATCH] examples: Replace with proper error handling to avoid potential memory errors Jiasheng Jiang
@ 2025-08-05 20:18 ` Nicolas George
2025-08-06 8:11 ` Alexander Strasser via ffmpeg-devel
0 siblings, 1 reply; 4+ messages in thread
From: Nicolas George @ 2025-08-05 20:18 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Jiasheng Jiang (HE12025-08-05):
> Moreover, replace with proper error handling to avoid potential memory leak.
There is no potential memory leak with exit().
And it does not have to be a lesson in good C practices.
Regards,
--
Nicolas George
_______________________________________________
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] 4+ messages in thread
* Re: [FFmpeg-devel] [PATCH] examples: Replace with proper error handling to avoid potential memory errors
2025-08-05 20:18 ` Nicolas George
@ 2025-08-06 8:11 ` Alexander Strasser via ffmpeg-devel
2025-08-06 9:14 ` Nicolas George
0 siblings, 1 reply; 4+ messages in thread
From: Alexander Strasser via ffmpeg-devel @ 2025-08-06 8:11 UTC (permalink / raw)
To: FFmpeg development discussions and patches; +Cc: Alexander Strasser
On 2025-08-05 22:18 +0200, Nicolas George wrote:
> Jiasheng Jiang (HE12025-08-05):
> > Moreover, replace with proper error handling to avoid potential memory leak.
>
> There is no potential memory leak with exit().
>
> And it does not have to be a lesson in good C practices.
I'm a bit undecided about this; especially because these are example files.
Best would be to have them correct, small, and beautiful while still
promoting good C practices.
I agree that the patch as proposed is not an improvement over all.
I would say it would be best to shorten it to only the first change:
--- a/doc/examples/decode_audio.c
+++ b/doc/examples/decode_audio.c
@@ -128,41 +128,48 @@ int main(int argc, char **argv)
outfilename = argv[2];
pkt = av_packet_alloc();
+ if (!pkt)
+ exit(1);
If someone wants to improve the example files to better handle errors
and resource de-allocation for real world use cases, then it should be
a follow up submission.
Best regards,
Alexander
_______________________________________________
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] 4+ messages in thread
* Re: [FFmpeg-devel] [PATCH] examples: Replace with proper error handling to avoid potential memory errors
2025-08-06 8:11 ` Alexander Strasser via ffmpeg-devel
@ 2025-08-06 9:14 ` Nicolas George
0 siblings, 0 replies; 4+ messages in thread
From: Nicolas George @ 2025-08-06 9:14 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Alexander Strasser via ffmpeg-devel (HE12025-08-06):
> I'm a bit undecided about this; especially because these are example files.
>
> Best would be to have them correct, small, and beautiful while still
> promoting good C practices.
Good C practices are verbose, and verbosity makes for poor examples.
> I agree that the patch as proposed is not an improvement over all.
>
> I would say it would be best to shorten it to only the first change:
>
> --- a/doc/examples/decode_audio.c
> +++ b/doc/examples/decode_audio.c
> @@ -128,41 +128,48 @@ int main(int argc, char **argv)
> outfilename = argv[2];
>
> pkt = av_packet_alloc();
> + if (!pkt)
> + exit(1);
Yes, the first change is necessary, it is not just good practice. It
would be better like the next ones, with an error message, though. This,
IMHO, is the sweet spot between verbosity and API didactics:
codec = avcodec_find_decoder(AV_CODEC_ID_MP2);
if (!codec) {
fprintf(stderr, "Codec not found\n");
exit(1);
}
If we really want to bring attention to good practices, we can add:
exit(1); /* or proper cleanup and returning */
And in any case, the commit message should inaccurately pretend to fix
possible leaks.
Regards,
--
Nicolas George
_______________________________________________
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] 4+ messages in thread
end of thread, other threads:[~2025-08-06 9:14 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-08-05 18:56 [FFmpeg-devel] [PATCH] examples: Replace with proper error handling to avoid potential memory errors Jiasheng Jiang
2025-08-05 20:18 ` Nicolas George
2025-08-06 8:11 ` Alexander Strasser via ffmpeg-devel
2025-08-06 9:14 ` Nicolas George
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