From f0a353ec357630f2ab21e27377a437743041d89e Mon Sep 17 00:00:00 2001
From: Vitaliy Margolen <wine-patch@kievinfo.com>
Date: Mon, 31 Mar 2003 01:32:47 +0000
Subject: [PATCH] Fix random segfaults in X11DRV_SetImageBits_1.

---
 graphics/x11drv/dib.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/graphics/x11drv/dib.c b/graphics/x11drv/dib.c
index 94262fca9e6..84d4cb7c563 100644
--- a/graphics/x11drv/dib.c
+++ b/graphics/x11drv/dib.c
@@ -1628,16 +1628,18 @@ static void X11DRV_DIB_SetImageBits_1( int lines, const BYTE *srcbits,
             XPutPixel( bmpImage, x++, h, colors[(srcval >> 1) & 1] );
             XPutPixel( bmpImage, x++, h, colors[ srcval       & 1] );
         }
-        srcval=*srcbyte;
-        switch (dstwidth & 7)
-        {
-        case 7: XPutPixel(bmpImage, x++, h, colors[srcval >> 7]); srcval<<=1;
-        case 6: XPutPixel(bmpImage, x++, h, colors[srcval >> 7]); srcval<<=1;
-        case 5: XPutPixel(bmpImage, x++, h, colors[srcval >> 7]); srcval<<=1;
-        case 4: XPutPixel(bmpImage, x++, h, colors[srcval >> 7]); srcval<<=1;
-        case 3: XPutPixel(bmpImage, x++, h, colors[srcval >> 7]); srcval<<=1;
-        case 2: XPutPixel(bmpImage, x++, h, colors[srcval >> 7]); srcval<<=1;
-        case 1: XPutPixel(bmpImage, x++, h, colors[srcval >> 7]);
+        if (dstwidth % 8){
+            srcval=*srcbyte;
+            switch (dstwidth & 7)
+            {
+            case 7: XPutPixel(bmpImage, x++, h, colors[srcval >> 7]); srcval<<=1;
+            case 6: XPutPixel(bmpImage, x++, h, colors[srcval >> 7]); srcval<<=1;
+            case 5: XPutPixel(bmpImage, x++, h, colors[srcval >> 7]); srcval<<=1;
+            case 4: XPutPixel(bmpImage, x++, h, colors[srcval >> 7]); srcval<<=1;
+            case 3: XPutPixel(bmpImage, x++, h, colors[srcval >> 7]); srcval<<=1;
+            case 2: XPutPixel(bmpImage, x++, h, colors[srcval >> 7]); srcval<<=1;
+            case 1: XPutPixel(bmpImage, x++, h, colors[srcval >> 7]);
+            }
         }
         srcbits += linebytes;
     }
-- 
GitLab