avauddec: fix buffer leak when send packet failed
authorMatej Knopp <matej.knopp@gmail.com>
Tue, 30 Jun 2020 16:33:56 +0000 (18:33 +0200)
committerJeongmo Yang <jm80.yang@samsung.com>
Tue, 26 Oct 2021 00:35:16 +0000 (09:35 +0900)
Change-Id: I83705a2d4951b3de189e065b4fb5dee55b3cf897
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-libav/-/merge_requests/81>
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
ext/libav/gstavauddec.c
packaging/gst-libav.spec

index f400d86..6a036fd 100755 (executable)
@@ -708,7 +708,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;
@@ -729,14 +729,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;
 
@@ -754,7 +755,7 @@ not_negotiated:
 send_packet_failed:
   {
     GST_WARNING_OBJECT (ffmpegdec, "decoding error");
-    goto done;
+    goto unmap;
   }
 }
 
index 4caf6d5..a04bfc7 100644 (file)
@@ -1,7 +1,7 @@
 Name:       gst-libav
 Summary:    Libav plugin for GStreamer
 Version:    1.16.2
-Release:    1
+Release:    2
 Group:      Multimedia/Framework
 License:    LGPL-2.0+
 Source:     %{name}-%{version}.tar.gz