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