From 72ae5049e1c92d76b72263d98744b4dfbb002a2c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin@martin.st>
Date: Mon, 19 Jul 2010 07:02:31 +0000
Subject: [PATCH] Do planar copy with a single memcpy only if the stride is
 equal to the length

This avoids writing outside of the designated rectangle.

Originally committed as revision 31756 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale
---
 libswscale/swscale.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/libswscale/swscale.c b/libswscale/swscale.c
index b589131375a..0340e80bfe3 100644
--- a/libswscale/swscale.c
+++ b/libswscale/swscale.c
@@ -1663,10 +1663,10 @@ static int planarCopyWrapper(SwsContext *c, const uint8_t* src[], int srcStride[
                     srcPtr+= srcStride[plane];
                     dstPtr+= dstStride[plane];
                 }
-            } else if (dstStride[plane]==srcStride[plane] && srcStride[plane] > 0) {
-                if (height > 0)
+            } else if (dstStride[plane]==srcStride[plane] && srcStride[plane] > 0 &&
+                       srcStride[plane] == length) {
                     memcpy(dst[plane] + dstStride[plane]*y, src[plane],
-                           (height - 1)*dstStride[plane] + length);
+                           height*dstStride[plane]);
             } else {
                 if(is16BPS(c->srcFormat) && is16BPS(c->dstFormat))
                     length*=2;
-- 
GitLab