gdk-pixbuf/u_contrib-gdk-pixbuf-xlib-Fix-rgb888amsb.patch

69 lines
1.9 KiB
Diff
Raw Normal View History

From: Max Staudt <mstaudt@suse.de>
Date: Fri Dec 9 14:26:34 2016 +0100
Subject: [PATCH]contrib/gdk-pixbuf-xlib: Fix rgb888amsb()
Patch-mainline: to be upstreamed
Git-repo: git://git.gnome.org/gdk-pixbuf
References: boo#929462 bsc#1010497
Signed-off-by: Max Staudt <mstaudt@suse.de>
On Little Endian, it wrote memory out of bounds (i.e. when running
inside a little endian client, connecting to a big endian X server).
On Big Endian, it only processed the first 1/4 of the icon.
The effects can be seen when running IceWM. Running native on Big Endian
ppc64 with a Big Endian X11 server, the icon background was 3/4 random:
https://bugzilla.suse.com/show_bug.cgi?id=929462
This match makes rgb888amsb() behave analogously to rgb888msb().
Signed-off-by: Max Staudt <mstaudt@suse.de>
---
contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib-drawable.c | 15 ---------------
1 file changed, 15 deletions(-)
diff --git a/contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib-drawable.c b/contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib-drawable.c
index 972c2be..422fdc8 100644
--- a/contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib-drawable.c
+++ b/contrib/gdk-pixbuf-xlib/gdk-pixbuf-xlib-drawable.c
@@ -915,13 +915,8 @@ rgb888amsb (XImage *image, guchar *pixels, int rowstride, xlib_colormap *colorma
int bpl;
guint8 *srow = (guint8 *)image->data, *orow = pixels;
-#ifdef LITTLE
- guint32 *o;
- guint32 *s;
-#else
guint8 *s; /* for byte order swapping */
guint8 *o;
-#endif
d (printf ("32 bit, msb, with alpha\n"));
@@ -931,24 +926,14 @@ rgb888amsb (XImage *image, guchar *pixels, int rowstride, xlib_colormap *colorma
/* msb data */
for (yy = 0; yy < height; yy++) {
-#ifdef LITTLE
- s = (guint32 *) srow;
- o = (guint32 *) orow;
-#else
s = srow;
o = orow;
-#endif
for (xx = 0; xx < width; xx++) {
-#ifdef LITTLE
*o++ = s[1];
*o++ = s[2];
*o++ = s[3];
*o++ = 0xff;
s += 4;
-#else
- *o++ = (*s << 8) | 0xff; /* untested */
- s++;
-#endif
}
srow += bpl;
orow += rowstride;