Dominique Leuenberger
308d8162c6
- u_contrib-gdk-pixbuf-xlib-Fix-rgb888amsb.patch Fix RGBA conversion for big endian X11 environments. Fixes (boo#929462), (bsc#1010497) OBS-URL: https://build.opensuse.org/request/show/445453 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gdk-pixbuf?expand=0&rev=117
69 lines
1.9 KiB
Diff
69 lines
1.9 KiB
Diff
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;
|