This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit 8970658472d1cb62d663ece0b6cacf4a1f465da3
Author:     Michael Niedermayer <[email protected]>
AuthorDate: Tue Feb 24 23:37:21 2026 +0100
Commit:     Michael Niedermayer <[email protected]>
CommitDate: Fri Mar 6 03:21:37 2026 +0100

    avfilter/vf_convolution: Use avpriv_mirror
    
    Fixes: out of array read
    Fixes: #YWH-PGM40646-35
    
    Found-by: jpraveenrao
    Signed-off-by: Michael Niedermayer <[email protected]>
---
 libavfilter/convolution.h    |  8 +++-----
 libavfilter/vf_convolution.c | 22 ++++++----------------
 2 files changed, 9 insertions(+), 21 deletions(-)

diff --git a/libavfilter/convolution.h b/libavfilter/convolution.h
index f88b708fab..71ec3b6804 100644
--- a/libavfilter/convolution.h
+++ b/libavfilter/convolution.h
@@ -21,6 +21,7 @@
 #ifndef AVFILTER_CONVOLUTION_H
 #define AVFILTER_CONVOLUTION_H
 #include "avfilter.h"
+#include "libavutil/internal.h"
 #include "libavutil/intreadwrite.h"
 
 enum MatrixMode {
@@ -71,11 +72,8 @@ static void setup_3x3(int radius, const uint8_t *c[], const 
uint8_t *src, int st
     int i;
 
     for (i = 0; i < 9; i++) {
-        int xoff = FFABS(x + ((i % 3) - 1));
-        int yoff = FFABS(y + (i / 3) - 1);
-
-        xoff = xoff >= w ? 2 * w - 1 - xoff : xoff;
-        yoff = yoff >= h ? 2 * h - 1 - yoff : yoff;
+        int xoff = avpriv_mirror(x + (i % 3) - 1, w - 1);
+        int yoff = avpriv_mirror(y + (i / 3) - 1, h - 1);
 
         c[i] = src + xoff * bpc + yoff * stride;
     }
diff --git a/libavfilter/vf_convolution.c b/libavfilter/vf_convolution.c
index ce42df2cde..f0d2cec78e 100644
--- a/libavfilter/vf_convolution.c
+++ b/libavfilter/vf_convolution.c
@@ -520,11 +520,8 @@ static void setup_5x5(int radius, const uint8_t *c[], 
const uint8_t *src, int st
     int i;
 
     for (i = 0; i < 25; i++) {
-        int xoff = FFABS(x + ((i % 5) - 2));
-        int yoff = FFABS(y + (i / 5) - 2);
-
-        xoff = xoff >= w ? 2 * w - 1 - xoff : xoff;
-        yoff = yoff >= h ? 2 * h - 1 - yoff : yoff;
+        int xoff = avpriv_mirror(x + (i % 5) - 2, w - 1);
+        int yoff = avpriv_mirror(y + (i / 5) - 2, h - 1);
 
         c[i] = src + xoff * bpc + yoff * stride;
     }
@@ -536,11 +533,8 @@ static void setup_7x7(int radius, const uint8_t *c[], 
const uint8_t *src, int st
     int i;
 
     for (i = 0; i < 49; i++) {
-        int xoff = FFABS(x + ((i % 7) - 3));
-        int yoff = FFABS(y + (i / 7) - 3);
-
-        xoff = xoff >= w ? 2 * w - 1 - xoff : xoff;
-        yoff = yoff >= h ? 2 * h - 1 - yoff : yoff;
+        int xoff = avpriv_mirror(x + (i % 7) - 3, w - 1);
+        int yoff = avpriv_mirror(y + (i / 7) - 3, h - 1);
 
         c[i] = src + xoff * bpc + yoff * stride;
     }
@@ -552,9 +546,7 @@ static void setup_row(int radius, const uint8_t *c[], const 
uint8_t *src, int st
     int i;
 
     for (i = 0; i < radius * 2 + 1; i++) {
-        int xoff = FFABS(x + i - radius);
-
-        xoff = xoff >= w ? 2 * w - 1 - xoff : xoff;
+        int xoff = avpriv_mirror(x + i - radius, w - 1);
 
         c[i] = src + xoff * bpc + y * stride;
     }
@@ -566,9 +558,7 @@ static void setup_column(int radius, const uint8_t *c[], 
const uint8_t *src, int
     int i;
 
     for (i = 0; i < radius * 2 + 1; i++) {
-        int xoff = FFABS(x + i - radius);
-
-        xoff = xoff >= h ? 2 * h - 1 - xoff : xoff;
+        int xoff = avpriv_mirror(x + i - radius, h - 1);
 
         c[i] = src + y * bpc + xoff * stride;
     }

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to