xserver: Branch 'master' - 2 commits

Julien Cristau jcristau at kemper.freedesktop.org
Mon Sep 1 11:06:05 PDT 2008


 Xext/xevie.c |   31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

New commits:
commit b5cdcfa55c399e83d51242e93d4f25d8bc4fec1f
Author: Julien Cristau <jcristau at debian.org>
Date:   Mon Sep 1 19:45:30 2008 +0200

    Xevie: swap replies as necessary

diff --git a/Xext/xevie.c b/Xext/xevie.c
index 8273b3e..dfec68f 100644
--- a/Xext/xevie.c
+++ b/Xext/xevie.c
@@ -151,6 +151,7 @@ static
 int ProcXevieQueryVersion (ClientPtr client)
 {
     xXevieQueryVersionReply rep;
+    int n;
 
     REQUEST_SIZE_MATCH (xXevieQueryVersionReq);
     rep.type = X_Reply;
@@ -158,6 +159,12 @@ int ProcXevieQueryVersion (ClientPtr client)
     rep.sequence_number = client->sequence;
     rep.server_major_version = XEVIE_MAJOR_VERSION;
     rep.server_minor_version = XEVIE_MINOR_VERSION;
+    if (client->swapped) {
+	swaps(&rep.sequence_number, n);
+	swapl(&rep.length, n);
+	swaps(&rep.server_major_version, n);
+	swaps(&rep.server_minor_version, n);
+    }
     WriteToClient (client, sizeof (xXevieQueryVersionReply), (char *)&rep);
     return client->noClientException;
 }
@@ -166,6 +173,7 @@ static
 int ProcXevieStart (ClientPtr client)
 {
     xXevieStartReply rep;
+    int n;
 
     REQUEST_SIZE_MATCH (xXevieStartReq);
     rep.pad1 = 0;
@@ -200,6 +208,10 @@ int ProcXevieStart (ClientPtr client)
     rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
+    if (client->swapped) {
+	swaps(&rep.sequence_number, n);
+	swapl(&rep.length, n);
+    }
     WriteToClient (client, sizeof (xXevieStartReply), (char *)&rep);
     return client->noClientException;
 }
@@ -208,6 +220,7 @@ static
 int ProcXevieEnd (ClientPtr client)
 {
     xXevieEndReply rep;
+    int n;
 
     REQUEST_SIZE_MATCH (xXevieEndReq);
     
@@ -222,6 +235,10 @@ int ProcXevieEnd (ClientPtr client)
     rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
+    if (client->swapped) {
+	swaps(&rep.sequence_number, n);
+	swapl(&rep.length, n);
+    }
     WriteToClient (client, sizeof (xXevieEndReply), (char *)&rep);
     return client->noClientException;
 }
@@ -233,6 +250,7 @@ int ProcXevieSend (ClientPtr client)
     xXevieSendReply rep;
     xEvent *xE;
     static unsigned char lastDetail = 0, lastType = 0;
+    int n;
 
     REQUEST_SIZE_MATCH (xXevieSendReq);
     
@@ -243,6 +261,10 @@ int ProcXevieSend (ClientPtr client)
     rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
+    if (client->swapped) {
+	swaps(&rep.sequence_number, n);
+	swapl(&rep.length, n);
+    }
     WriteToClient (client, sizeof (xXevieSendReply), (char *)&rep);
 
     switch(xE->u.u.type) {
@@ -280,6 +302,7 @@ int ProcXevieSelectInput (ClientPtr client)
 {
     REQUEST (xXevieSelectInputReq);
     xXevieSelectInputReply rep;
+    int n;
 
     REQUEST_SIZE_MATCH (xXevieSelectInputReq);
 
@@ -290,6 +313,10 @@ int ProcXevieSelectInput (ClientPtr client)
     rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
+    if (client->swapped) {
+	swaps(&rep.sequence_number, n);
+	swapl(&rep.length, n);
+    }
     WriteToClient (client, sizeof (xXevieSelectInputReply), (char *)&rep);
     return client->noClientException;
 }
commit d3ae193f4ac87530f2745f8cb5e7b70dd516881e
Author: Thorvald Natvig <slicer at users.sourceforge.net>
Date:   Mon Sep 1 19:36:56 2008 +0200

    Xevie: always initialize rep.length (bug#17394)
    
    The XEvIE extension doesn't clear the rep.length field for any reply but
    the version check. Hence, if there is junk data in it and that is sent
    to the client, it hangs.
    
    X.Org bug#17394 (http://bugs.freedesktop.org/show_bug.cgi?id=17394)

diff --git a/Xext/xevie.c b/Xext/xevie.c
index 292f207..8273b3e 100644
--- a/Xext/xevie.c
+++ b/Xext/xevie.c
@@ -197,6 +197,7 @@ int ProcXevieStart (ClientPtr client)
     
     xevieModifiersOn = FALSE;
 
+    rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
     WriteToClient (client, sizeof (xXevieStartReply), (char *)&rep);
@@ -218,6 +219,7 @@ int ProcXevieEnd (ClientPtr client)
         XevieEnd(xevieClientIndex);
     }
 
+    rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
     WriteToClient (client, sizeof (xXevieEndReply), (char *)&rep);
@@ -238,6 +240,7 @@ int ProcXevieSend (ClientPtr client)
         return BadAccess;
 
     xE = (xEvent *)&stuff->event;
+    rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
     WriteToClient (client, sizeof (xXevieSendReply), (char *)&rep);
@@ -284,6 +287,7 @@ int ProcXevieSelectInput (ClientPtr client)
         return BadAccess;
 
     xevieMask = stuff->event_mask;
+    rep.length = 0;
     rep.type = X_Reply;
     rep.sequence_number = client->sequence;
     WriteToClient (client, sizeof (xXevieSelectInputReply), (char *)&rep);


More information about the xorg-commit mailing list