From 972dbf7bfdbaff596a1d99ad062a4a009ff6b40d Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Mon, 29 Jul 2024 19:22:19 +0200 Subject: [PATCH] randr: ProcRRGetProviders(): use stack for tiny temporary buffer The reply payload buffer is very small and short-lived, so we can easily use a local dynamic array for that, thus saving an extra heap alloc/free. Signed-off-by: Enrico Weigelt, metux IT consult --- randr/rrprovider.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/randr/rrprovider.c b/randr/rrprovider.c index a142ff6170..73d1784119 100644 --- a/randr/rrprovider.c +++ b/randr/rrprovider.c @@ -60,7 +60,6 @@ ProcRRGetProviders (ClientPtr client) ScreenPtr pScreen; rrScrPrivPtr pScrPriv; int rc; - CARD8 *extra; unsigned int extraLen; RRProvider *providers; int total_providers = 0, count_providers = 0; @@ -96,6 +95,7 @@ ProcRRGetProviders (ClientPtr client) } extraLen = total_providers * sizeof(CARD32); + char extra[extraLen]; xRRGetProvidersReply rep = { .type = X_Reply, @@ -105,13 +105,6 @@ ProcRRGetProviders (ClientPtr client) .length = bytes_to_int32(extraLen), }; - if (extraLen) { - extra = malloc(extraLen); - if (!extra) - return BadAlloc; - } else - extra = NULL; - providers = (RRProvider *)extra; ADD_PROVIDER(pScreen); xorg_list_for_each_entry(iter, &pScreen->secondary_list, secondary_head) { @@ -125,11 +118,7 @@ ProcRRGetProviders (ClientPtr client) swaps(&rep.nProviders); } WriteToClient(client, sizeof(xRRGetProvidersReply), (char *)&rep); - if (extraLen) - { - WriteToClient (client, extraLen, (char *) extra); - free(extra); - } + WriteToClient(client, extraLen, extra); return Success; }