[FFmpeg-cvslog] lavfi/select/scene: fix potential overread.

Clément Bœsch git at videolan.org
Sun Oct 14 02:21:20 CEST 2012


ffmpeg | branch: master | Clément Bœsch <ubitux at gmail.com> | Sat Oct 13 18:19:29 2012 +0200| [0852648301ad968bc7d79d000400e2b973bbb59a] | committer: Clément Bœsch

lavfi/select/scene: fix potential overread.

Also make sure we use the actual width of the image and not the whole
linesize.

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

 libavfilter/vf_select.c |   11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/libavfilter/vf_select.c b/libavfilter/vf_select.c
index c600024..b0c3cb2 100644
--- a/libavfilter/vf_select.c
+++ b/libavfilter/vf_select.c
@@ -204,21 +204,24 @@ static double get_scene_score(AVFilterContext *ctx, AVFilterBufferRef *picref)
         picref->video->h    == prev_picref->video->h &&
         picref->video->w    == prev_picref->video->w &&
         picref->linesize[0] == prev_picref->linesize[0]) {
-        int x, y;
+        int x, y, nb_sad = 0;
         int64_t sad = 0;
         double mafd, diff;
         uint8_t *p1 =      picref->data[0];
         uint8_t *p2 = prev_picref->data[0];
         const int linesize = picref->linesize[0];
 
-        for (y = 0; y < picref->video->h; y += 8)
-            for (x = 0; x < linesize; x += 8)
+        for (y = 0; y < picref->video->h - 8; y += 8) {
+            for (x = 0; x < picref->video->w*3 - 8; x += 8) {
                 sad += select->c.sad[1](select,
                                         p1 + y * linesize + x,
                                         p2 + y * linesize + x,
                                         linesize, 8);
+                nb_sad += 8 * 8;
+            }
+        }
         emms_c();
-        mafd = sad / (picref->video->h * picref->video->w * 3);
+        mafd = nb_sad ? sad / nb_sad : 0;
         diff = fabs(mafd - select->prev_mafd);
         ret  = av_clipf(FFMIN(mafd, diff) / 100., 0, 1);
         select->prev_mafd = mafd;



More information about the ffmpeg-cvslog mailing list