Strange libXrender behaviour on Solaris10/SPARC
Julien Cristau
jcristau at debian.org
Wed Nov 10 05:36:58 PST 2010
On Wed, Nov 10, 2010 at 13:16:48 +0100, Nicolai Stange wrote:
> Hi everybody,
>
> after installing gtk-engines the problem occured again (and thus, the
> opensolaris patches Alan pointed me to did not solve the problem).
>
> However I did some further investigation with xscope and gdb and tracked
> it down. The setup the problem occurs in: I'm running mozilla on
> Solaris10/SPARC with gtk-engines (clearlooks) through 'ssh -X' with a
> local X server on Linux/x86_64 (Debian Lenny).
>
> It is actually a problem with the xorg-server. When s client calls
> XRenderCreateLinearGradient on SPARC, this request and a following
> GetInputFocus get transmitted properly (MSB first) over the wire. The
> xorg-server on Linux/x86_64 then converts the big endian request to
> little endian and while doing so, it errorneously overwrites the
> following GetInputFocus-request.
> The problem is in render.c:
> static void swapStops(void *stuff, int num)
> {
> int i, n;
> CARD32 *stops;
> CARD16 *colors;
> stops = (CARD32 *)(stuff);
> for (i = 0; i < num; ++i) {
> swapl(stops, n);
> ++stops;
> }
> colors = (CARD16 *)(stops);
> for (i = 0; i < 4*num; ++i) {
> swaps(stops, n);
> ++stops;
> }
> }
>
> When converting the colors, not stops but colors should be incremented:
> static void swapStops(void *stuff, int num)
> {
> int i, n;
> CARD32 *stops;
> CARD16 *colors;
> stops = (CARD32 *)(stuff);
> for (i = 0; i < num; ++i) {
> swapl(stops, n);
> ++stops;
> }
> colors = (CARD16 *)(stops);
> for (i = 0; i < 4*num; ++i) {
> swaps(colors, n);
> ++colors;
> }
> }
>
Fix is also at http://patchwork.freedesktop.org/patch/2521/ so will
hopefully get applied soon.
[...]
> swapStops overwrites the majorop-Field of the GetInputFocus-Request,
> resulting in Request- and Length-errors.
> May I expect this to get fixed in 1.7.x, that is Debian, too?
>
I'll get the fix into the 1.7 branch (and Debian) when it's upstream in
master, thanks!
Cheers,
Julien
More information about the xorg
mailing list