[FFmpeg-cvslog] lavfi/avcodec: add consistency checks in avfilter_copy_buf_props()

Stefano Sabatini git at videolan.org
Sat Jun 16 00:35:39 CEST 2012


ffmpeg | branch: master | Stefano Sabatini <stefasab at gmail.com> | Sun Jun 10 18:17:50 2012 +0200| [f0394f28c38fffe05b3b4b3c1d8c00d9defb6ecc] | committer: Stefano Sabatini

lavfi/avcodec: add consistency checks in avfilter_copy_buf_props()

The function will abort through an assert if the source is not defined,
or if the internal state of the source is inconsistent (e.g. type = AUDIO
&& !src->audio).

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f0394f28c38fffe05b3b4b3c1d8c00d9defb6ecc
---

 libavfilter/avcodec.c |    8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/libavfilter/avcodec.c b/libavfilter/avcodec.c
index 6b23772..f6e25bd 100644
--- a/libavfilter/avcodec.c
+++ b/libavfilter/avcodec.c
@@ -24,6 +24,7 @@
  */
 
 #include "avcodec.h"
+#include "libavutil/avassert.h"
 #include "libavutil/opt.h"
 
 int avfilter_copy_frame_props(AVFilterBufferRef *dst, const AVFrame *src)
@@ -83,6 +84,11 @@ int avfilter_copy_buf_props(AVFrame *dst, const AVFilterBufferRef *src)
 {
     int planes, nb_channels;
 
+    if (!dst)
+        return AVERROR(EINVAL);
+    /* abort in case the src is NULL and dst is not, avoid inconsistent state in dst */
+    av_assert0(src);
+
     memcpy(dst->data, src->data, sizeof(dst->data));
     memcpy(dst->linesize, src->linesize, sizeof(dst->linesize));
 
@@ -91,6 +97,7 @@ int avfilter_copy_buf_props(AVFrame *dst, const AVFilterBufferRef *src)
 
     switch (src->type) {
     case AVMEDIA_TYPE_VIDEO:
+        av_assert0(src->video);
         dst->width               = src->video->w;
         dst->height              = src->video->h;
         dst->sample_aspect_ratio = src->video->sample_aspect_ratio;
@@ -100,6 +107,7 @@ int avfilter_copy_buf_props(AVFrame *dst, const AVFilterBufferRef *src)
         dst->pict_type           = src->video->pict_type;
         break;
     case AVMEDIA_TYPE_AUDIO:
+        av_assert0(src->audio);
         nb_channels = av_get_channel_layout_nb_channels(src->audio->channel_layout);
         planes      = av_sample_fmt_is_planar(src->format) ? nb_channels : 1;
 



More information about the ffmpeg-cvslog mailing list