diff --git a/gdk-pixbuf.changes b/gdk-pixbuf.changes index 5311079..67ecb6d 100644 --- a/gdk-pixbuf.changes +++ b/gdk-pixbuf.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Fri Dec 9 15:02:53 UTC 2016 - mstaudt@suse.com + +- u_contrib-gdk-pixbuf-xlib-Fix-rgb888amsb.patch + Fix RGBA conversion for big endian X11 environments. + Fixes (boo#929462), (bsc#1010497) + ------------------------------------------------------------------- Mon Sep 19 17:22:31 UTC 2016 - zaitor@opensuse.org diff --git a/gdk-pixbuf.spec b/gdk-pixbuf.spec index e07967e..24cbb56 100644 --- a/gdk-pixbuf.spec +++ b/gdk-pixbuf.spec @@ -30,6 +30,7 @@ Source: http://download.gnome.org/sources/gdk-pixbuf/2.36/%{name}-%{vers Source1: macros.gdk-pixbuf Source2: README.SUSE Source99: baselibs.conf +Patch0: u_contrib-gdk-pixbuf-xlib-Fix-rgb888amsb.patch BuildRequires: libjasper-devel BuildRequires: libjpeg-devel BuildRequires: libtiff-devel @@ -102,6 +103,7 @@ This package contains development files for gdk-pixbuf. %if !0%{?is_opensuse} translation-update-upstream %endif +%patch0 -p1 %if "%_lib" == "lib64" cp -a %{S:2} . %endif diff --git a/u_contrib-gdk-pixbuf-xlib-Fix-rgb888amsb.patch b/u_contrib-gdk-pixbuf-xlib-Fix-rgb888amsb.patch new file mode 100644 index 0000000..ac40f4a --- /dev/null +++ b/u_contrib-gdk-pixbuf-xlib-Fix-rgb888amsb.patch @@ -0,0 +1,68 @@ +From: Max Staudt +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 + +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 +--- + 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;