avdemux/mux: Memory leak and possible crash in avio_alloc_context
authorSatya Prakash Gupta <sp.gupta@samsung.com>
Tue, 11 Jul 2017 06:04:03 +0000 (11:34 +0530)
committerSebastian Dröge <sebastian@centricular.com>
Mon, 17 Jul 2017 08:09:48 +0000 (11:09 +0300)
https://bugzilla.gnome.org/show_bug.cgi?id=784735

ext/libav/gstavprotocol.c

index 5d01eaa..d106f9b 100644 (file)
@@ -205,6 +205,9 @@ gst_ffmpegdata_close (AVIOContext * h)
 {
   GstProtocolInfo *info;
 
+  if (h == NULL)
+    return 0;
+
   info = (GstProtocolInfo *) h->opaque;
   if (info == NULL)
     return 0;
@@ -265,6 +268,11 @@ gst_ffmpegdata_open (GstPad * pad, int flags, AVIOContext ** context)
   *context =
       avio_alloc_context (buffer, buffer_size, flags, (void *) info,
       gst_ffmpegdata_read, gst_ffmpegdata_write, gst_ffmpegdata_seek);
+  if (*context == NULL) {
+    GST_WARNING ("Failed to allocate memory");
+    av_free (buffer);
+    return -ENOMEM;
+  }
   (*context)->seekable = AVIO_SEEKABLE_NORMAL;
   if (!(flags & AVIO_FLAG_WRITE)) {
     (*context)->buf_ptr = (*context)->buf_end;
@@ -318,6 +326,9 @@ gst_ffmpeg_pipe_close (AVIOContext * h)
 {
   GST_LOG ("Closing pipe");
 
+  if (h == NULL)
+    return 0;
+
   h->opaque = NULL;
   av_freep (&h->buffer);
   av_free (h);
@@ -343,6 +354,11 @@ gst_ffmpeg_pipe_open (GstFFMpegPipe * ffpipe, int flags, AVIOContext ** context)
   *context =
       avio_alloc_context (buffer, buffer_size, 0, (void *) ffpipe,
       gst_ffmpeg_pipe_read, NULL, NULL);
+  if (*context == NULL) {
+    GST_WARNING ("Failed to allocate memory");
+    av_free (buffer);
+    return -ENOMEM;
+  }
   (*context)->seekable = 0;
   (*context)->buf_ptr = (*context)->buf_end;