diff options
author | James Almer <jamrial@gmail.com> | 2020-08-30 23:57:23 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2020-09-01 10:05:05 -0300 |
commit | 0271098e6c9ff8f2a97d65087e424f6d547e53f9 (patch) | |
tree | a15eaf66d360b0ed41e2c013562a233d41a12a49 /libavcodec | |
parent | 2a14d55a7c41ba8665cfd17b82d96e669ecd0e4c (diff) | |
download | ffmpeg-0271098e6c9ff8f2a97d65087e424f6d547e53f9.tar.gz |
avcodec/encode: unref the packet on AVCodec.receive_packet() failure
Fixes memleaks with some encoders that don't unref the packet before
returning.
This is consistent with the behavior of AVCodec.encode()
implementations in encode_simple_internal().
Found-by: mkver
Reviewed-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/encode.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/libavcodec/encode.c b/libavcodec/encode.c index 8bc10c4abb..2e540baf37 100644 --- a/libavcodec/encode.c +++ b/libavcodec/encode.c @@ -242,7 +242,9 @@ static int encode_receive_packet_internal(AVCodecContext *avctx, AVPacket *avpkt if (avctx->codec->receive_packet) { ret = avctx->codec->receive_packet(avctx, avpkt); - if (!ret) + if (ret < 0) + av_packet_unref(avpkt); + else // Encoders must always return ref-counted buffers. // Side-data only packets have no data and can be not ref-counted. av_assert0(!avpkt->data || avpkt->buf); |