From 98cf1a7e2d27d84041bd4d9a9252d55c1252d010 Mon Sep 17 00:00:00 2001 From: Satya Prakash Gupta Date: Tue, 11 Jul 2017 11:34:03 +0530 Subject: [PATCH] avdemux/mux: Memory leak and possible crash in avio_alloc_context https://bugzilla.gnome.org/show_bug.cgi?id=784735 --- ext/libav/gstavprotocol.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ext/libav/gstavprotocol.c b/ext/libav/gstavprotocol.c index 5d01eaa..d106f9b 100644 --- a/ext/libav/gstavprotocol.c +++ b/ext/libav/gstavprotocol.c @@ -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; -- 2.7.4