dib.c - random segfaults
Vitaliy Margolen
wine-patch at kievinfo.com
Sat Mar 29 22:50:33 CST 2003
Using my ImageList patch uncovered one more bug ;-)
Vitaliy Margolen
changelog:
fix random segfaults in X11DRV_SetImageBits_1
Index: graphics/x11drv/dib.c
===================================================================
RCS file: /home/wine/wine/graphics/x11drv/dib.c,v
retrieving revision 1.107
diff -u -r1.107 dib.c
--- graphics/x11drv/dib.c 18 Feb 2003 23:29:48 -0000 1.107
+++ graphics/x11drv/dib.c 30 Mar 2003 04:42:48 -0000
@@ -1628,16 +1628,18 @@
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;
}
More information about the wine-patches
mailing list