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)
committerMatej Knopp <matej.knopp@gmail.com>
Tue, 30 Jun 2020 16:39:59 +0000 (18:39 +0200)
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-libav/-/merge_requests/81>

ext/libav/gstavauddec.c

index d518b70..756f92d 100644 (file)
@@ -701,7 +701,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;
@@ -722,14 +722,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;
 
@@ -747,7 +748,7 @@ not_negotiated:
 send_packet_failed:
   {
     GST_WARNING_OBJECT (ffmpegdec, "decoding error");
-    goto done;
+    goto unmap;
   }
 }