Xevie cleanups, byteswapping fixes & request length check fixes
This commit is contained in:
parent
edad0a9dfe
commit
f37046984d
39
Xext/xevie.c
39
Xext/xevie.c
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user