diff options
author | Peter Harris <peter.harris@hummingbird.com> | 2007-12-20 15:58:01 -0500 |
---|---|---|
committer | Julien Cristau <jcristau@debian.org> | 2008-09-21 19:19:24 +0200 |
commit | 2b266eda6e23d16116f8a8e258192df353970279 (patch) | |
tree | aea30e756f8b031ef0c924c98661e679f2da3eee /randr | |
parent | 03ab8f11d25b0ca39a3b37b5350bca4c1028768e (diff) |
Fix panoramiX request and reply swapping
Fix panoramiX request and reply swapping
Set window and screen values in panoramix replies
Prevent buffer overrun in ProcPanoramiXGetScreenSize
Diffstat (limited to 'randr')
-rw-r--r-- | randr/rrxinerama.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/randr/rrxinerama.c b/randr/rrxinerama.c index e9945901f..544666ff1 100644 --- a/randr/rrxinerama.c +++ b/randr/rrxinerama.c @@ -138,10 +138,11 @@ ProcRRXineramaGetState(ClientPtr client) rep.length = 0; rep.sequenceNumber = client->sequence; rep.state = active; + rep.window = stuff->window; if(client->swapped) { swaps (&rep.sequenceNumber, n); swapl (&rep.length, n); - swaps (&rep.state, n); + swapl (&rep.window, n); } WriteToClient(client, sizeof(xPanoramiXGetStateReply), (char *)&rep); return client->noClientException; @@ -192,10 +193,11 @@ ProcRRXineramaGetScreenCount(ClientPtr client) rep.length = 0; rep.sequenceNumber = client->sequence; rep.ScreenCount = RRXineramaScreenCount (pWin->drawable.pScreen); + rep.window = stuff->window; if(client->swapped) { swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); - swaps(&rep.ScreenCount, n); + swapl(&rep.window, n); } WriteToClient(client, sizeof(xPanoramiXGetScreenCountReply), (char *)&rep); return client->noClientException; @@ -223,11 +225,15 @@ ProcRRXineramaGetScreenSize(ClientPtr client) rep.sequenceNumber = client->sequence; rep.width = pRoot->drawable.width; rep.height = pRoot->drawable.height; + rep.window = stuff->window; + rep.screen = stuff->screen; if(client->swapped) { swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); - swaps(&rep.width, n); - swaps(&rep.height, n); + swapl(&rep.width, n); + swapl(&rep.height, n); + swapl(&rep.window, n); + swapl(&rep.screen, n); } WriteToClient(client, sizeof(xPanoramiXGetScreenSizeReply), (char *)&rep); return client->noClientException; @@ -351,6 +357,7 @@ SProcRRXineramaGetState(ClientPtr client) register int n; swaps (&stuff->length, n); REQUEST_SIZE_MATCH(xPanoramiXGetStateReq); + swapl (&stuff->window, n); return ProcRRXineramaGetState(client); } @@ -361,6 +368,7 @@ SProcRRXineramaGetScreenCount(ClientPtr client) register int n; swaps (&stuff->length, n); REQUEST_SIZE_MATCH(xPanoramiXGetScreenCountReq); + swapl (&stuff->window, n); return ProcRRXineramaGetScreenCount(client); } @@ -371,6 +379,8 @@ SProcRRXineramaGetScreenSize(ClientPtr client) register int n; swaps (&stuff->length, n); REQUEST_SIZE_MATCH(xPanoramiXGetScreenSizeReq); + swapl (&stuff->window, n); + swapl (&stuff->screen, n); return ProcRRXineramaGetScreenSize(client); } |