diff options
author | Julien Cristau <jcristau@debian.org> | 2008-11-26 21:19:55 +0100 |
---|---|---|
committer | Julien Cristau <jcristau@debian.org> | 2008-12-03 17:33:47 +0100 |
commit | 0b5ecabfb803cd820338fb0364521fe39b05578b (patch) | |
tree | cc0099bc0a8fb59635c921dbe85520b7d8b77d65 /randr/rrsdispatch.c | |
parent | 110a71d11ab7a1a55a6a24d792457fdef0b0746d (diff) |
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>
Diffstat (limited to 'randr/rrsdispatch.c')
-rw-r--r-- | randr/rrsdispatch.c | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/randr/rrsdispatch.c b/randr/rrsdispatch.c index 5a6dab5bf..d356ab049 100644 --- a/randr/rrsdispatch.c +++ b/randr/rrsdispatch.c @@ -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) = { |