diff options
author | Satya Prakash Gupta <sp.gupta@samsung.com> | 2017-07-11 11:34:03 +0530 |
---|---|---|
committer | Sebastian Dröge <sebastian@centricular.com> | 2017-07-17 11:09:48 +0300 |
commit | 98cf1a7e2d27d84041bd4d9a9252d55c1252d010 (patch) | |
tree | 1f408dda63cedb13bd96893fc009f135531f5051 /ext | |
parent | 4284d791bc2c3ae716e4f99cedd870de9f575aec (diff) |
avdemux/mux: Memory leak and possible crash in avio_alloc_context
https://bugzilla.gnome.org/show_bug.cgi?id=784735
Diffstat (limited to 'ext')
-rw-r--r-- | ext/libav/gstavprotocol.c | 16 |
1 files changed, 16 insertions, 0 deletions
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; |