From 5b6bb114add8f4aac9a9434cd723e5062ae2461f Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 14 Jan 2014 23:16:07 +0100 Subject: decoder/ffmpeg: check for av_samples_get_buffer_size() errors Fixes potential nullptr dereference. --- src/decoder/FfmpegDecoderPlugin.cxx | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/decoder/FfmpegDecoderPlugin.cxx') diff --git a/src/decoder/FfmpegDecoderPlugin.cxx b/src/decoder/FfmpegDecoderPlugin.cxx index 47e1a3384..c99ecebe3 100644 --- a/src/decoder/FfmpegDecoderPlugin.cxx +++ b/src/decoder/FfmpegDecoderPlugin.cxx @@ -223,6 +223,9 @@ copy_interleave_frame(const AVCodecContext *codec_context, codec_context->channels, frame->nb_samples, codec_context->sample_fmt, 1); + if (data_size <= 0) + return data_size; + if (av_sample_fmt_is_planar(codec_context->sample_fmt) && codec_context->channels > 1) { if(*global_buffer_size < data_size) { -- cgit v1.2.3 From b7d6133593dcfca7b52eff13985f10a39098862f Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 15 Jan 2014 11:31:51 +0100 Subject: decoder/ffmpeg: include cleanup --- src/decoder/FfmpegDecoderPlugin.cxx | 1 - 1 file changed, 1 deletion(-) (limited to 'src/decoder/FfmpegDecoderPlugin.cxx') diff --git a/src/decoder/FfmpegDecoderPlugin.cxx b/src/decoder/FfmpegDecoderPlugin.cxx index c99ecebe3..1876425e2 100644 --- a/src/decoder/FfmpegDecoderPlugin.cxx +++ b/src/decoder/FfmpegDecoderPlugin.cxx @@ -38,7 +38,6 @@ extern "C" { #include #include #include -#include } #include -- cgit v1.2.3 From 313d1d5d8379ce8c0763f43775e767832942a7ef Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 15 Jan 2014 11:13:50 +0100 Subject: decoder/ffmpeg: support libav v10_alpha1 --- src/decoder/FfmpegDecoderPlugin.cxx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/decoder/FfmpegDecoderPlugin.cxx') diff --git a/src/decoder/FfmpegDecoderPlugin.cxx b/src/decoder/FfmpegDecoderPlugin.cxx index 1876425e2..593f42d39 100644 --- a/src/decoder/FfmpegDecoderPlugin.cxx +++ b/src/decoder/FfmpegDecoderPlugin.cxx @@ -38,6 +38,10 @@ extern "C" { #include #include #include + +#if LIBAVUTIL_VERSION_MAJOR >= 53 +#include +#endif } #include @@ -453,7 +457,11 @@ ffmpeg_decode(Decoder &decoder, InputStream &input) decoder_initialized(decoder, audio_format, input.seekable, total_time); +#if LIBAVUTIL_VERSION_MAJOR >= 53 + AVFrame *frame = av_frame_alloc(); +#else AVFrame *frame = avcodec_alloc_frame(); +#endif if (!frame) { LogError(ffmpeg_domain, "Could not allocate frame"); avformat_close_input(&format_context); @@ -497,7 +505,9 @@ ffmpeg_decode(Decoder &decoder, InputStream &input) } } while (cmd != DecoderCommand::STOP); -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54, 28, 0) +#if LIBAVUTIL_VERSION_MAJOR >= 53 + av_frame_free(&frame); +#elif LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54, 28, 0) avcodec_free_frame(&frame); #else av_freep(&frame); -- cgit v1.2.3