summaryrefslogtreecommitdiff
path: root/libavformat/ipmovie.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2021-02-01 19:47:16 +0100
committerMichael Niedermayer <michael@niedermayer.cc>2021-03-15 22:24:31 +0100
commit712d3ac539f30239b764d8621829dc9dc913da61 (patch)
tree1b508dfb5f4640a628837788c621906ea01b7217 /libavformat/ipmovie.c
parent63344337f945843e8f247b3b15fa0f0e7b0f0a7c (diff)
downloadffmpeg-712d3ac539f30239b764d8621829dc9dc913da61.tar.gz
avformat/ipmovie: Free packets allocated in header reading
Fixes: memleaks Fixes: 29905/clusterfuzz-testcase-minimized-ffmpeg_DEMUXER_fuzzer-5679700745781248 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat/ipmovie.c')
-rw-r--r--libavformat/ipmovie.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/libavformat/ipmovie.c b/libavformat/ipmovie.c
index 137c857700..3234d591da 100644
--- a/libavformat/ipmovie.c
+++ b/libavformat/ipmovie.c
@@ -661,8 +661,10 @@ static int ipmovie_read_header(AVFormatContext *s)
ipmovie->palette[i] = 0xFFU << 24;
/* process the first chunk which should be CHUNK_INIT_VIDEO */
- if (process_ipmovie_chunk(ipmovie, pb, &pkt) != CHUNK_INIT_VIDEO)
+ if (process_ipmovie_chunk(ipmovie, pb, &pkt) != CHUNK_INIT_VIDEO) {
+ av_packet_unref(&pkt);
return AVERROR_INVALIDDATA;
+ }
/* peek ahead to the next chunk-- if it is an init audio chunk, process
* it; if it is the first video chunk, this is a silent file */
@@ -674,8 +676,10 @@ static int ipmovie_read_header(AVFormatContext *s)
if (chunk_type == CHUNK_VIDEO)
ipmovie->audio_type = AV_CODEC_ID_NONE; /* no audio */
- else if (process_ipmovie_chunk(ipmovie, pb, &pkt) != CHUNK_INIT_AUDIO)
+ else if (process_ipmovie_chunk(ipmovie, pb, &pkt) != CHUNK_INIT_AUDIO) {
+ av_packet_unref(&pkt);
return AVERROR_INVALIDDATA;
+ }
/* initialize the stream decoders */
st = avformat_new_stream(s, NULL);