Xevie cleanups, byteswapping fixes & request length check fixes

This commit is contained in:
Alan Coopersmith 2008-03-19 14:06:53 -07:00
parent edad0a9dfe
commit f37046984d

View File

@ -147,8 +147,6 @@ XevieExtensionInit (void)
ReqCode = (unsigned char)extEntry->base; ReqCode = (unsigned char)extEntry->base;
ErrorBase = extEntry->errorBase; ErrorBase = extEntry->errorBase;
} }
/* PC servers initialize the desktop colors (citems) here! */
} }
/*ARGSUSED*/ /*ARGSUSED*/
@ -218,6 +216,8 @@ int ProcEnd (register ClientPtr client)
{ {
xXevieEndReply rep; xXevieEndReply rep;
REQUEST_SIZE_MATCH (xXevieEndReq);
if (xevieFlag) { if (xevieFlag) {
if (client->index != xevieClientIndex) if (client->index != xevieClientIndex)
return BadAccess; return BadAccess;
@ -240,6 +240,8 @@ int ProcSend (register ClientPtr client)
xEvent *xE; xEvent *xE;
static unsigned char lastDetail = 0, lastType = 0; static unsigned char lastDetail = 0, lastType = 0;
REQUEST_SIZE_MATCH (xXevieSendReq);
if (client->index != xevieClientIndex) if (client->index != xevieClientIndex)
return BadAccess; return BadAccess;
@ -284,10 +286,12 @@ int ProcSelectInput (register ClientPtr client)
REQUEST (xXevieSelectInputReq); REQUEST (xXevieSelectInputReq);
xXevieSelectInputReply rep; xXevieSelectInputReply rep;
REQUEST_SIZE_MATCH (xXevieSelectInputReq);
if (client->index != xevieClientIndex) if (client->index != xevieClientIndex)
return BadAccess; return BadAccess;
xevieMask = (long)stuff->event_mask; xevieMask = stuff->event_mask;
rep.type = X_Reply; rep.type = X_Reply;
rep.sequence_number = client->sequence; rep.sequence_number = client->sequence;
WriteToClient (client, sizeof (xXevieSelectInputReply), (char *)&rep); WriteToClient (client, sizeof (xXevieSelectInputReply), (char *)&rep);
@ -321,7 +325,10 @@ int SProcQueryVersion (register ClientPtr client)
register int n; register int n;
REQUEST(xXevieQueryVersionReq); REQUEST(xXevieQueryVersionReq);
swaps(&stuff->length, n); swaps (&stuff->length, n);
REQUEST_SIZE_MATCH (xXevieQueryVersionReq);
swaps (&stuff->client_major_version, n);
swaps (&stuff->client_minor_version, n);
return ProcQueryVersion(client); return ProcQueryVersion(client);
} }
@ -332,8 +339,8 @@ int SProcStart (ClientPtr client)
REQUEST (xXevieStartReq); REQUEST (xXevieStartReq);
swaps (&stuff->length, n); swaps (&stuff->length, n);
REQUEST_SIZE_MATCH (xXevieStartReq);
swapl (&stuff->screen, n); swapl (&stuff->screen, n);
REQUEST_AT_LEAST_SIZE (xXevieStartReq);
return ProcStart (client); return ProcStart (client);
} }
@ -344,8 +351,8 @@ int SProcEnd (ClientPtr client)
REQUEST (xXevieEndReq); REQUEST (xXevieEndReq);
swaps (&stuff->length, n); swaps (&stuff->length, n);
REQUEST_AT_LEAST_SIZE (xXevieEndReq); REQUEST_SIZE_MATCH (xXevieEndReq);
swapl(&stuff->cmap, n); swapl (&stuff->cmap, n);
return ProcEnd (client); return ProcEnd (client);
} }
@ -353,11 +360,21 @@ static
int SProcSend (ClientPtr client) int SProcSend (ClientPtr client)
{ {
register int n; register int n;
xEvent eventT;
EventSwapPtr proc;
REQUEST (xXevieSendReq); REQUEST (xXevieSendReq);
swaps (&stuff->length, n); swaps (&stuff->length, n);
REQUEST_AT_LEAST_SIZE (xXevieSendReq); REQUEST_SIZE_MATCH (xXevieSendReq);
swapl(&stuff->event, n); swapl (&stuff->dataType, n);
/* Swap event */
proc = EventSwapVector[stuff->event.u.u.type & 0177];
if (!proc || proc == NotImplemented) /* no swapping proc; invalid event type? */
return (BadValue);
(*proc)(&stuff->event, &eventT);
stuff->event = eventT;
return ProcSend (client); return ProcSend (client);
} }
@ -368,8 +385,8 @@ int SProcSelectInput (ClientPtr client)
REQUEST (xXevieSelectInputReq); REQUEST (xXevieSelectInputReq);
swaps (&stuff->length, n); swaps (&stuff->length, n);
REQUEST_AT_LEAST_SIZE (xXevieSelectInputReq); REQUEST_SIZE_MATCH (xXevieSelectInputReq);
swapl(&stuff->event_mask, n); swapl (&stuff->event_mask, n);
return ProcSelectInput (client); return ProcSelectInput (client);
} }