diff mbox series

[FFmpeg-devel,2/3] swscale/x86/rgb2rgb: fix deinterleaveBytes writing past the end of the buffers

Message ID 20240901130935.5887-2-ramiro.polla@gmail.com
State New
Headers show
Series [FFmpeg-devel,1/3] swscale/x86/rgb2rgb: fix deinterleaveBytes for unaligned dst pointers | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 success Make fate finished
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Ramiro Polla Sept. 1, 2024, 1:09 p.m. UTC
---
 libswscale/x86/rgb2rgb.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/libswscale/x86/rgb2rgb.c b/libswscale/x86/rgb2rgb.c
index 4d6ba9ff21..1617c33338 100644
--- a/libswscale/x86/rgb2rgb.c
+++ b/libswscale/x86/rgb2rgb.c
@@ -2380,7 +2380,12 @@  static void deinterleave_bytes_ ## cpuext(const uint8_t *src, uint8_t *dst1, uin
                                           int dst1Stride, int dst2Stride)     \
 {                                                                             \
     for (int h = 0; h < height; h++) {                                        \
-        ff_nv12ToUV_ ## cpuext(dst1, dst2, NULL, src, NULL, width, NULL, NULL); \
+        if (width >= 16)                                                      \
+            ff_nv12ToUV_ ## cpuext(dst1, dst2, NULL, src, NULL, width - 15, NULL, NULL); \
+        for (int w = (width & (~15)); w < width; w++) {                       \
+            dst1[w] = src[2*w+0];                                             \
+            dst2[w] = src[2*w+1];                                             \
+        }                                                                     \
         src  += srcStride;                                                    \
         dst1 += dst1Stride;                                                   \
         dst2 += dst2Stride;                                                   \