mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-01-06 02:40:14 +01:00
randr: add swapped dispatch for RR[GS]etCrtcTransform
Fix a memory leak in ProcRRGetCrtcTransform() while I'm at it.
Signed-off-by: Julien Cristau <jcristau@debian.org>
Cc: Keith Packard <keithp@keithp.com>
(cherry picked from commit 0b5ecabfb8)
Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
de83a342f4
commit
90900976ce
2 changed files with 25 additions and 10 deletions
|
|
@ -1150,8 +1150,7 @@ transform_filter_encode (ClientPtr client, char *output,
|
|||
if (client->swapped) {
|
||||
swaps (nbytesFilter, n);
|
||||
swaps (nparamsFilter, n);
|
||||
SwapLongs ((CARD32 *) (output + nbytes),
|
||||
nparams * sizeof (xFixed));
|
||||
SwapLongs ((CARD32 *) (output + nbytes), nparams);
|
||||
}
|
||||
nbytes += nparams * sizeof (xFixed);
|
||||
return nbytes;
|
||||
|
|
@ -1162,7 +1161,7 @@ transform_encode (ClientPtr client, xRenderTransform *wire, PictTransform *pict)
|
|||
{
|
||||
xRenderTransform_from_PictTransform (wire, pict);
|
||||
if (client->swapped)
|
||||
SwapLongs ((CARD32 *) wire, sizeof (xRenderTransform));
|
||||
SwapLongs ((CARD32 *) wire, sizeof (xRenderTransform) >> 2);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
@ -1214,5 +1213,6 @@ ProcRRGetCrtcTransform (ClientPtr client)
|
|||
swapl (&reply->length, n);
|
||||
}
|
||||
WriteToClient (client, sizeof (xRRGetCrtcTransformReply) + nextra, (char *) reply);
|
||||
xfree(reply);
|
||||
return client->noClientException;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -367,21 +367,36 @@ SProcRRSetCrtcGamma (ClientPtr client)
|
|||
static int
|
||||
SProcRRSetCrtcTransform (ClientPtr client)
|
||||
{
|
||||
int n, nparams;
|
||||
char *filter;
|
||||
CARD32 *params;
|
||||
REQUEST(xRRSetCrtcTransformReq);
|
||||
|
||||
REQUEST_SIZE_MATCH(xRRSetCrtcTransformReq);
|
||||
(void) stuff;
|
||||
return BadImplementation;
|
||||
|
||||
REQUEST_AT_LEAST_SIZE(xRRSetCrtcTransformReq);
|
||||
swaps(&stuff->length, n);
|
||||
swapl(&stuff->crtc, n);
|
||||
SwapLongs((CARD32 *)&stuff->transform, (sizeof(xRenderTransform)) >> 2);
|
||||
swaps(&stuff->nbytesFilter, n);
|
||||
filter = (char *)(stuff + 1);
|
||||
params = (CARD32 *) (filter + ((stuff->nbytesFilter + 3) & ~3));
|
||||
nparams = ((CARD32 *) stuff + client->req_len) - params;
|
||||
if (nparams < 0)
|
||||
return BadLength;
|
||||
|
||||
SwapLongs(params, nparams);
|
||||
return (*ProcRandrVector[stuff->randrReqType]) (client);
|
||||
}
|
||||
|
||||
static int
|
||||
SProcRRGetCrtcTransform (ClientPtr client)
|
||||
{
|
||||
int n;
|
||||
REQUEST(xRRGetCrtcTransformReq);
|
||||
|
||||
|
||||
REQUEST_SIZE_MATCH(xRRGetCrtcTransformReq);
|
||||
(void) stuff;
|
||||
return BadImplementation;
|
||||
swaps(&stuff->length, n);
|
||||
swapl(&stuff->crtc, n);
|
||||
return (*ProcRandrVector[stuff->randrReqType]) (client);
|
||||
}
|
||||
|
||||
int (*SProcRandrVector[RRNumberRequests])(ClientPtr) = {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue