diff --git a/render/render.c b/render/render.c index bd4aa265e5..cda1f331d7 100644 --- a/render/render.c +++ b/render/render.c @@ -98,8 +98,6 @@ static int ProcRenderCreateConicalGradient(ClientPtr pClient); static int ProcRenderDispatch(ClientPtr pClient); -static int SProcRenderCreateConicalGradient(ClientPtr pClient); - static int SProcRenderDispatch(ClientPtr pClient); int (*ProcRenderVector[RenderNumberRequests]) (ClientPtr) = { @@ -177,7 +175,7 @@ int (*SProcRenderVector[RenderNumberRequests]) (ClientPtr) = { ProcRenderCreateSolidFill, ProcRenderCreateLinearGradient, ProcRenderCreateRadialGradient, - SProcRenderCreateConicalGradient}; + ProcRenderCreateConicalGradient}; int RenderErrBase; static DevPrivateKeyRec RenderClientPrivateKeyRec; @@ -1869,7 +1867,8 @@ SingleRenderCreateRadialGradient(ClientPtr client, } static int -SingleRenderCreateConicalGradient(ClientPtr client) +SingleRenderCreateConicalGradient(ClientPtr client, + xRenderCreateConicalGradientReq *stuff) { PicturePtr pPicture; int len; @@ -1877,10 +1876,6 @@ SingleRenderCreateConicalGradient(ClientPtr client) xFixed *stops; xRenderColor *colors; - REQUEST(xRenderCreateConicalGradientReq); - - REQUEST_AT_LEAST_SIZE(xRenderCreateConicalGradientReq); - LEGAL_NEW_RESOURCE(stuff->pid, client); len = (client->req_len << 2) - sizeof(xRenderCreateConicalGradientReq); @@ -1937,31 +1932,6 @@ swapStops(void *stuff, int num) } } -static int _X_COLD -SProcRenderCreateConicalGradient(ClientPtr client) -{ - int len; - - REQUEST(xRenderCreateConicalGradientReq); - REQUEST_AT_LEAST_SIZE(xRenderCreateConicalGradientReq); - - swapl(&stuff->pid); - swapl(&stuff->center.x); - swapl(&stuff->center.y); - swapl(&stuff->angle); - swapl(&stuff->nStops); - - len = (client->req_len << 2) - sizeof(xRenderCreateConicalGradientReq); - if (stuff->nStops > UINT32_MAX / (sizeof(xFixed) + sizeof(xRenderColor))) - return BadLength; - if (len != stuff->nStops * (sizeof(xFixed) + sizeof(xRenderColor))) - return BadLength; - - swapStops(stuff + 1, stuff->nStops); - - return ProcRenderCreateConicalGradient(client); -} - static int _X_COLD SProcRenderDispatch(ClientPtr client) { @@ -2581,14 +2551,12 @@ PanoramiXRenderCreateRadialGradient(ClientPtr client, } static int -PanoramiXRenderCreateConicalGradient(ClientPtr client) +PanoramiXRenderCreateConicalGradient(ClientPtr client, + xRenderCreateConicalGradientReq *stuff) { - REQUEST(xRenderCreateConicalGradientReq); PanoramiXRes *newPict; int result = Success; - REQUEST_AT_LEAST_SIZE(xRenderCreateConicalGradientReq); - if (!(newPict = calloc(1, sizeof(PanoramiXRes)))) return BadAlloc; @@ -2598,7 +2566,7 @@ PanoramiXRenderCreateConicalGradient(ClientPtr client) XINERAMA_FOR_EACH_SCREEN_BACKWARD({ stuff->pid = newPict->info[walkScreenIdx].id; - result = SingleRenderCreateConicalGradient(client); + result = SingleRenderCreateConicalGradient(client, stuff); if (result != Success) break; }); @@ -3094,10 +3062,29 @@ ProcRenderCreateRadialGradient(ClientPtr client) static int ProcRenderCreateConicalGradient(ClientPtr client) { + REQUEST(xRenderCreateConicalGradientReq); + REQUEST_AT_LEAST_SIZE(xRenderCreateConicalGradientReq); + + if (client->swapped) { + swapl(&stuff->pid); + swapl(&stuff->center.x); + swapl(&stuff->center.y); + swapl(&stuff->angle); + swapl(&stuff->nStops); + + int len = (client->req_len << 2) - sizeof(xRenderCreateConicalGradientReq); + if (stuff->nStops > UINT32_MAX / (sizeof(xFixed) + sizeof(xRenderColor))) + return BadLength; + if (len != stuff->nStops * (sizeof(xFixed) + sizeof(xRenderColor))) + return BadLength; + + swapStops(stuff + 1, stuff->nStops); + } + #ifdef XINERAMA - return (usePanoramiX ? PanoramiXRenderCreateConicalGradient(client) - : SingleRenderCreateConicalGradient(client)); + return (usePanoramiX ? PanoramiXRenderCreateConicalGradient(client, stuff) + : SingleRenderCreateConicalGradient(client, stuff)); #else - return SingleRenderCreateConicalGradient(client); + return SingleRenderCreateConicalGradient(client, stuff); #endif }