diff options
author | Matej Knopp <matej.knopp@gmail.com> | 2020-06-30 18:33:56 +0200 |
---|---|---|
committer | GStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2020-09-25 00:38:46 +0000 |
commit | c14d933e44ddea6bae06e23ec318c7c12f690685 (patch) | |
tree | 71c929ed89156fa5bbfcd22533b66f378418502a | |
parent | baa4914caeb4ae4bd77be54c917137f2f8b80736 (diff) | |
download | gst-libav-c14d933e44ddea6bae06e23ec318c7c12f690685.tar.gz |
avauddec: fix buffer leak when send packet failed
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-libav/-/merge_requests/92>
-rw-r--r-- | ext/libav/gstavauddec.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/ext/libav/gstavauddec.c b/ext/libav/gstavauddec.c index 45eda1c..1193243 100644 --- a/ext/libav/gstavauddec.c +++ b/ext/libav/gstavauddec.c @@ -699,7 +699,7 @@ gst_ffmpegauddec_handle_frame (GstAudioDecoder * decoder, GstBuffer * inbuf) gst_avpacket_init (&packet, data, size); if (!packet.size) - goto done; + goto unmap; if (avcodec_send_packet (ffmpegdec->context, &packet) < 0) { goto send_packet_failed; @@ -720,14 +720,15 @@ gst_ffmpegauddec_handle_frame (GstAudioDecoder * decoder, GstBuffer * inbuf) } } while (got_frame); - gst_buffer_unmap (inbuf, &map); - gst_buffer_unref (inbuf); - if (is_header || got_any_frames) { ret = gst_audio_decoder_finish_frame (GST_AUDIO_DECODER (ffmpegdec), NULL, 1); } +unmap: + gst_buffer_unmap (inbuf, &map); + gst_buffer_unref (inbuf); + done: return ret; @@ -745,7 +746,7 @@ not_negotiated: send_packet_failed: { GST_WARNING_OBJECT (ffmpegdec, "decoding error"); - goto done; + goto unmap; } } |