Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2022-08-09 16:19:41 +0300
committerAnton Khirnov <anton@khirnov.net>2022-08-13 13:41:05 +0300
commitee2092ddeceb1041d130b4680b3f58fd86a4904c (patch)
tree85b70746b0e19bd28b5c2dee8b3a901dc68d7697 /fftools
parent5d499d32505be79f1cc7608106f01fee84c91085 (diff)
fftools/ffmpeg_mux: avoid leaking pkt on errors
Diffstat (limited to 'fftools')
-rw-r--r--fftools/ffmpeg_mux.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/fftools/ffmpeg_mux.c b/fftools/ffmpeg_mux.c
index 08a76f0066..b424ef0021 100644
--- a/fftools/ffmpeg_mux.c
+++ b/fftools/ffmpeg_mux.c
@@ -97,8 +97,10 @@ static int write_packet(OutputFile *of, OutputStream *ost, AVPacket *pkt)
fs = filesize(s->pb);
atomic_store(&of->mux->last_filesize, fs);
- if (fs >= of->mux->limit_filesize)
- return AVERROR_EOF;
+ if (fs >= of->mux->limit_filesize) {
+ ret = AVERROR_EOF;
+ goto fail;
+ }
if ((st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && ost->vsync_method == VSYNC_DROP) ||
(st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && audio_sync_method < 0))
@@ -138,8 +140,11 @@ static int write_packet(OutputFile *of, OutputStream *ost, AVPacket *pkt)
av_log(s, loglevel, "Non-monotonous DTS in output stream "
"%d:%d; previous: %"PRId64", current: %"PRId64"; ",
ost->file_index, ost->st->index, ms->last_mux_dts, pkt->dts);
- if (exit_on_error)
- return AVERROR(EINVAL);
+ if (exit_on_error) {
+ ret = AVERROR(EINVAL);
+ goto fail;
+ }
+
av_log(s, loglevel, "changing to %"PRId64". This may result "
"in incorrect timestamps in the output file.\n",
max);
@@ -170,10 +175,13 @@ static int write_packet(OutputFile *of, OutputStream *ost, AVPacket *pkt)
ret = av_interleaved_write_frame(s, pkt);
if (ret < 0) {
print_error("av_interleaved_write_frame()", ret);
- return ret;
+ goto fail;
}
return 0;
+fail:
+ av_packet_unref(pkt);
+ return ret;
}
static int sync_queue_process(OutputFile *of, OutputStream *ost, AVPacket *pkt)