From f1a80e1268fa4d235a411a8cdf20b4f13eafcde0 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Wed, 23 Mar 2011 18:06:51 +0200 Subject: [PATCH 01/23] dix: remove unused debug code Signed-off-by: Tiago Vignatti Reviewed-by: Mikhail Gusarov Reviewed-by: Nicolas Peninguy Reviewed-by: Peter Hutterer --- dix/dixfonts.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/dix/dixfonts.c b/dix/dixfonts.c index d8f15290b..316a8a545 100644 --- a/dix/dixfonts.c +++ b/dix/dixfonts.c @@ -66,10 +66,6 @@ Equipment Corporation. #include "dixfont.h" #include "xace.h" -#ifdef DEBUG -#include -#endif - #ifdef XF86BIGFONT #include "xf86bigfontsrv.h" #endif @@ -391,14 +387,6 @@ OpenFont(ClientPtr client, XID fid, Mask flags, unsigned lenfname, char *pfontna int i; FontPtr cached = (FontPtr)0; -#ifdef FONTDEBUG - char *f; - f = malloc(lenfname + 1); - memmove(f, pfontname, lenfname); - f[lenfname] = '\0'; - ErrorF("[dix] OpenFont: fontname is \"%s\"\n", f); - free(f); -#endif if (!lenfname || lenfname > XLFDMAXFONTNAMELEN) return BadName; if (patternCache) From 49051355d47849b3dd73631e3e2287e319a7f4e5 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Wed, 23 Mar 2011 18:08:29 +0200 Subject: [PATCH 02/23] dix: remove unused macro Signed-off-by: Tiago Vignatti Reviewed-by: Nicolas Peninguy Reviewed-by: Peter Hutterer --- dix/dixfonts.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/dix/dixfonts.c b/dix/dixfonts.c index 316a8a545..71689cff7 100644 --- a/dix/dixfonts.c +++ b/dix/dixfonts.c @@ -70,8 +70,6 @@ Equipment Corporation. #include "xf86bigfontsrv.h" #endif -#define QUERYCHARINFO(pci, pr) *(pr) = (pci)->metrics - extern pointer fosNaturalParams; extern FontPtr defaultFont; From aa7096ca6f108e399d9916639cf20c57f9776305 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Fri, 25 Mar 2011 18:24:34 +0200 Subject: [PATCH 03/23] xorg: remove unused pointer values all over the server Signed-off-by: Tiago Vignatti Reviewed-by: Nicolas Peninguy Reviewed-by: Peter Hutterer --- Xext/xtest.c | 5 +---- Xi/getprop.c | 2 +- Xi/getselev.c | 4 ++-- hw/xfree86/common/xf86Config.c | 4 ++-- mi/midispcur.c | 10 +--------- mi/mipointer.c | 1 - xfixes/region.c | 2 -- 7 files changed, 7 insertions(+), 21 deletions(-) diff --git a/Xext/xtest.c b/Xext/xtest.c index b26bc3387..6780aa62a 100644 --- a/Xext/xtest.c +++ b/Xext/xtest.c @@ -374,10 +374,7 @@ ProcXTestFakeInput(ClientPtr client) if (!dev->valuator) return BadDevice; - /* broken lib, XI events have root uninitialized */ - if (extension || ev->u.keyButtonPointer.root == None) - root = GetCurrentRootWindow(dev); - else + if (!(extension || ev->u.keyButtonPointer.root == None)) { rc = dixLookupWindow(&root, ev->u.keyButtonPointer.root, client, DixGetAttrAccess); diff --git a/Xi/getprop.c b/Xi/getprop.c index ba98fc80f..5e102627d 100644 --- a/Xi/getprop.c +++ b/Xi/getprop.c @@ -115,7 +115,7 @@ ProcXGetDeviceDontPropagateList(ClientPtr client) if ((others = wOtherInputMasks(pWin)) != 0) { for (i = 0; i < EMASKSIZE; i++) - tbuf = ClassFromMask(NULL, others->dontPropagateMask[i], i, + ClassFromMask(NULL, others->dontPropagateMask[i], i, &count, COUNT); if (count) { rep.count = count; diff --git a/Xi/getselev.c b/Xi/getselev.c index d63b661cd..09a53f4e4 100644 --- a/Xi/getselev.c +++ b/Xi/getselev.c @@ -118,13 +118,13 @@ ProcXGetSelectedExtensionEvents(ClientPtr client) if ((pOthers = wOtherInputMasks(pWin)) != 0) { for (others = pOthers->inputClients; others; others = others->next) for (i = 0; i < EMASKSIZE; i++) - tclient = ClassFromMask(NULL, others->mask[i], i, + ClassFromMask(NULL, others->mask[i], i, &rep.all_clients_count, COUNT); for (others = pOthers->inputClients; others; others = others->next) if (SameClient(others, client)) { for (i = 0; i < EMASKSIZE; i++) - tclient = ClassFromMask(NULL, others->mask[i], i, + ClassFromMask(NULL, others->mask[i], i, &rep.this_client_count, COUNT); break; } diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index 5312ca60d..4b897a173 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -309,7 +309,7 @@ xf86ModulelistFromConfig(pointer **optlist) } if (found == FALSE) { XF86LoadPtr ptr = (XF86LoadPtr)xf86configptr->conf_modules; - ptr = xf86addNewLoadDirective(ptr, ModuleDefaults[i].name, XF86_LOAD_MODULE, ModuleDefaults[i].load_opt); + xf86addNewLoadDirective(ptr, ModuleDefaults[i].name, XF86_LOAD_MODULE, ModuleDefaults[i].load_opt); xf86Msg(X_INFO, "\"%s\" will be loaded by default.\n", ModuleDefaults[i].name); } } @@ -318,7 +318,7 @@ xf86ModulelistFromConfig(pointer **optlist) for (i=0 ; ModuleDefaults[i].name != NULL ; i++) { if (ModuleDefaults[i].toLoad == TRUE) { XF86LoadPtr ptr = (XF86LoadPtr)xf86configptr->conf_modules; - ptr = xf86addNewLoadDirective(ptr, ModuleDefaults[i].name, XF86_LOAD_MODULE, ModuleDefaults[i].load_opt); + xf86addNewLoadDirective(ptr, ModuleDefaults[i].name, XF86_LOAD_MODULE, ModuleDefaults[i].load_opt); } } } diff --git a/mi/midispcur.c b/mi/midispcur.c index 9b3e87a57..32c5c9df6 100644 --- a/mi/midispcur.c +++ b/mi/midispcur.c @@ -397,7 +397,6 @@ Bool miDCPutUpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor, int x, int y, unsigned long source, unsigned long mask) { - miDCScreenPtr pScreenPriv; miDCCursorPtr pPriv; miDCBufferPtr pBuffer; WindowPtr pWin; @@ -410,8 +409,7 @@ miDCPutUpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor, if (!pPriv) return FALSE; } - pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates, - miDCScreenKey); + pWin = pScreen->root; pBuffer = miGetDCDevice(pDev, pScreen); @@ -444,14 +442,11 @@ Bool miDCSaveUnderCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y, int w, int h) { - miDCScreenPtr pScreenPriv; miDCBufferPtr pBuffer; PixmapPtr pSave; WindowPtr pWin; GCPtr pGC; - pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates, - miDCScreenKey); pBuffer = miGetDCDevice(pDev, pScreen); pSave = pBuffer->pSave; @@ -478,14 +473,11 @@ Bool miDCRestoreUnderCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y, int w, int h) { - miDCScreenPtr pScreenPriv; miDCBufferPtr pBuffer; PixmapPtr pSave; WindowPtr pWin; GCPtr pGC; - pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates, - miDCScreenKey); pBuffer = miGetDCDevice(pDev, pScreen); pSave = pBuffer->pSave; diff --git a/mi/mipointer.c b/mi/mipointer.c index c578d0b1d..db243810c 100644 --- a/mi/mipointer.c +++ b/mi/mipointer.c @@ -602,7 +602,6 @@ miPointerSetPosition(DeviceIntPtr pDev, int mode, int *x, int *y) pScreen = newScreen; (*pScreenPriv->screenFuncs->NewEventScreen) (pDev, pScreen, FALSE); - pScreenPriv = GetScreenPrivate (pScreen); /* Smash the confine to the new screen */ pPointer->limits.x2 = pScreen->width; pPointer->limits.y2 = pScreen->height; diff --git a/xfixes/region.c b/xfixes/region.c index 81ead4d1c..f49349629 100644 --- a/xfixes/region.c +++ b/xfixes/region.c @@ -757,13 +757,11 @@ ProcXFixesSetPictureClipRegion (ClientPtr client) PicturePtr pPicture; RegionPtr pRegion; ScreenPtr pScreen; - PictureScreenPtr ps; REQUEST(xXFixesSetPictureClipRegionReq); REQUEST_SIZE_MATCH (xXFixesSetPictureClipRegionReq); VERIFY_PICTURE(pPicture, stuff->picture, client, DixSetAttrAccess); pScreen = pPicture->pDrawable->pScreen; - ps = GetPictureScreen (pScreen); VERIFY_REGION_OR_NONE(pRegion, stuff->region, client, DixReadAccess); return SetPictureClipRegion (pPicture, stuff->xOrigin, stuff->yOrigin, From 8ab92cd9822510f426d179a636ef34bb0ace3bb3 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Fri, 25 Mar 2011 18:56:02 +0200 Subject: [PATCH 04/23] xfree86: dri2: fix memory leak and free resources properly Signed-off-by: Tiago Vignatti Reviewed-by: Nicolas Peninguy Reviewed-by: Peter Hutterer --- hw/xfree86/dri2/dri2.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 9ca378fed..10be59953 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -221,11 +221,16 @@ DRI2AddDrawableRef(DRI2DrawablePtr pPriv, XID id, XID dri2_id, if (ref == NULL) return BadAlloc; - if (!AddResource(dri2_id, dri2DrawableRes, pPriv)) + if (!AddResource(dri2_id, dri2DrawableRes, pPriv)) { + free(ref); return BadAlloc; + } if (!DRI2LookupDrawableRef(pPriv, id)) - if (!AddResource(id, dri2DrawableRes, pPriv)) + if (!AddResource(id, dri2DrawableRes, pPriv)) { + FreeResourceByType(dri2_id, dri2DrawableRes, TRUE); + free(ref); return BadAlloc; + } ref->id = id; ref->dri2_id = dri2_id; From dce2f10cf7bef9929cefadb5088d5b66df43a865 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Fri, 25 Mar 2011 19:21:03 +0200 Subject: [PATCH 05/23] mi: fix memory leak in miInitVisuals Free the pointers inside miInitVisuals, so the callers of this function (fboverlay.c and fbscreen.c) don't need to worry with deallocation in the case of failure. Signed-off-by: Tiago Vignatti Reviewed-by: Nicolas Peninguy Reviewed-by: Peter Hutterer --- fb/fbscreen.c | 4 ---- mi/micmap.c | 2 ++ 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/fb/fbscreen.c b/fb/fbscreen.c index fa518f64a..9e6ecf50f 100644 --- a/fb/fbscreen.c +++ b/fb/fbscreen.c @@ -221,11 +221,7 @@ fbFinishScreenInit(ScreenPtr pScreen, rootdepth = 0; if (!fbInitVisuals (&visuals, &depths, &nvisuals, &ndepths, &rootdepth, &defaultVisual,((unsigned long)1<<(imagebpp-1)), 8)) - { - free(visuals); - free(depths); return FALSE; - } if (! miScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width, rootdepth, ndepths, depths, defaultVisual, nvisuals, visuals)) diff --git a/mi/micmap.c b/mi/micmap.c index 41e03006e..7448ef8fd 100644 --- a/mi/micmap.c +++ b/mi/micmap.c @@ -564,6 +564,8 @@ miInitVisuals(VisualPtr *visualp, DepthPtr *depthp, int *nvisualp, { vid = malloc(nvtype * sizeof (VisualID)); if (!vid) { + free(depth); + free(visual); free(preferredCVCs); return FALSE; } From 623bb34342641811e2151232f1ab4e2ee3d6b871 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Fri, 25 Mar 2011 19:27:17 +0200 Subject: [PATCH 06/23] xi: fix memory leak in ProcXIQueryDevice Signed-off-by: Tiago Vignatti Reviewed-by: Nicolas Peninguy Reviewed-by: Peter Hutterer --- Xi/xiquerydevice.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Xi/xiquerydevice.c b/Xi/xiquerydevice.c index 8b5421130..8b6990491 100644 --- a/Xi/xiquerydevice.c +++ b/Xi/xiquerydevice.c @@ -107,8 +107,10 @@ ProcXIQueryDevice(ClientPtr client) } info = calloc(1, len); - if (!info) + if (!info) { + free(skip); return BadAlloc; + } memset(&rep, 0, sizeof(xXIQueryDeviceReply)); rep.repType = X_Reply; From 7ae46b69ba3f05f46529131e6a864904967cde3a Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Fri, 25 Mar 2011 21:33:15 +0200 Subject: [PATCH 07/23] mi: fix memory leak in miFillUniqueSpanGroup Signed-off-by: Tiago Vignatti Reviewed-by: Nicolas Peninguy Reviewed-by: Peter Hutterer --- mi/mispans.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mi/mispans.c b/mi/mispans.c index 53539e515..21ba4da4f 100644 --- a/mi/mispans.c +++ b/mi/mispans.c @@ -458,6 +458,8 @@ void miFillUniqueSpanGroup(DrawablePtr pDraw, GCPtr pGC, SpanGroup *spanGroup) } free(yspans); free(ysizes); + free(newpoints); + free(newwidths); miDisposeSpanGroup (spanGroup); return; } From 12e46e83733b47d2704e1509960192365102af46 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Fri, 25 Mar 2011 22:07:31 +0200 Subject: [PATCH 08/23] dix: fix memory leak in SetDefaultFontPath Signed-off-by: Tiago Vignatti Reviewed-by: Nicolas Peninguy Reviewed-by: Peter Hutterer --- dix/dixfonts.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dix/dixfonts.c b/dix/dixfonts.c index 71689cff7..fbac124da 100644 --- a/dix/dixfonts.c +++ b/dix/dixfonts.c @@ -1815,8 +1815,10 @@ SetDefaultFontPath(char *path) /* get enough for string, plus values -- use up commas */ len = strlen(temp_path) + 1; nump = cp = newpath = malloc(len); - if (!newpath) + if (!newpath) { + free(temp_path); return BadAlloc; + } pp = (unsigned char *) temp_path; cp++; while (*pp) { From 4d87606a0d0eb63458098028c300c39c6f1bd2bf Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Fri, 25 Mar 2011 22:07:44 +0200 Subject: [PATCH 09/23] Xi: fix memory leak in ProcXGetSelectedExtensionEvents Signed-off-by: Tiago Vignatti Reviewed-by: Nicolas Peninguy Reviewed-by: Peter Hutterer --- Xi/getselev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Xi/getselev.c b/Xi/getselev.c index 09a53f4e4..7304738b3 100644 --- a/Xi/getselev.c +++ b/Xi/getselev.c @@ -152,8 +152,8 @@ ProcXGetSelectedExtensionEvents(ClientPtr client) if (total_length) { client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write; WriteSwappedDataToClient(client, total_length, buf); - free(buf); } + free(buf); return Success; } From 2aa935bc5cc1e2d5365a97b8c5bb3d33eb5fc758 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Fri, 25 Mar 2011 22:10:55 +0200 Subject: [PATCH 10/23] fb: fix memory leak in fbOverlayFinishScreenInit Signed-off-by: Tiago Vignatti Reviewed-by: Nicolas Peninguy Reviewed-by: Peter Hutterer --- fb/fboverlay.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/fb/fboverlay.c b/fb/fboverlay.c index 61eaaa3f9..255cc23c1 100644 --- a/fb/fboverlay.c +++ b/fb/fboverlay.c @@ -384,12 +384,16 @@ fbOverlayFinishScreenInit(ScreenPtr pScreen, if (!fbInitVisuals (&visuals, &depths, &nvisuals, &ndepths, &depth1, &defaultVisual, ((unsigned long)1<<(bpp1-1)) | - ((unsigned long)1<<(bpp2-1)), 8)) + ((unsigned long)1<<(bpp2-1)), 8)) { + free(pScrPriv); return FALSE; + } if (! miScreenInit(pScreen, 0, xsize, ysize, dpix, dpiy, 0, depth1, ndepths, depths, - defaultVisual, nvisuals, visuals)) + defaultVisual, nvisuals, visuals)) { + free(pScrPriv); return FALSE; + } /* MI thinks there's no frame buffer */ #ifdef MITSHM ShmRegisterFbFuncs(pScreen); From bc123319206930638ef1217922824d586d4ada6d Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Fri, 25 Mar 2011 22:21:21 +0200 Subject: [PATCH 11/23] xfree86: fix memory leak in xf86ConfigFbEntity Signed-off-by: Tiago Vignatti Reviewed-by: Nicolas Peninguy Reviewed-by: Peter Hutterer --- hw/xfree86/common/xf86Helper.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c index 399883886..3cdffdb43 100644 --- a/hw/xfree86/common/xf86Helper.c +++ b/hw/xfree86/common/xf86Helper.c @@ -1831,6 +1831,7 @@ xf86ConfigFbEntity(ScrnInfoPtr pScrn, int scrnFlag, int entityIndex, xf86SetEntityFuncs(entityIndex,init,enter,leave,private); + free(pEnt); return pScrn; } From ac2fac24d8baa56f369f4e54908bc00c2b73a60a Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Tue, 29 Mar 2011 19:49:32 +0300 Subject: [PATCH 12/23] xfree86: fix memory leaks in configLayout Signed-off-by: Tiago Vignatti Reviewed-by: Nicolas Peninguy Reviewed-by: Peter Hutterer --- hw/xfree86/common/xf86Config.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index 4b897a173..7a23253a0 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -1485,7 +1485,7 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout, { XF86ConfAdjacencyPtr adjp; XF86ConfInactivePtr idp; - int count = 0; + int saved_count, count = 0; int scrnum; XF86ConfLayoutPtr l; MessageType from; @@ -1553,6 +1553,9 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout, scrnum = adjp->adj_scrnum; if (!configScreen(slp[count].screen, adjp->adj_screen, scrnum, X_CONFIG)) { + do { + free(slp[count].screen); + } while(count--); free(slp); return FALSE; } @@ -1641,6 +1644,10 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout, } } + if (!count) + saved_count = 1; + else + saved_count = count; /* * Count the number of inactive devices. */ @@ -1657,16 +1664,14 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout, idp = conf_layout->lay_inactive_lst; count = 0; while (idp) { - if (!configDevice(&gdp[count], idp->inactive_device, FALSE)) { - free(gdp); - return FALSE; - } + if (!configDevice(&gdp[count], idp->inactive_device, FALSE)) + goto bail; count++; idp = (XF86ConfInactivePtr)idp->list.next; } if (!configInputDevices(conf_layout, servlayoutp)) - return FALSE; + goto bail; servlayoutp->id = conf_layout->lay_identifier; servlayoutp->screens = slp; @@ -1675,6 +1680,14 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout, from = X_DEFAULT; return TRUE; + +bail: + do { + free(slp[saved_count].screen); + } while(saved_count--); + free(slp); + free(gdp); + return FALSE; } /* From af054db005b48160b117dfd5bec5f821ee614ea9 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Tue, 29 Mar 2011 19:51:23 +0300 Subject: [PATCH 13/23] xfree86: fix bad free configInputDevices introduced in 93ca526892c0d22afa05cce6496198c652043a19. Signed-off-by: Tiago Vignatti Reviewed-by: Dan Nicholson Reviewed-by: Nicolas Peninguy Reviewed-by: Peter Hutterer --- hw/xfree86/common/xf86Config.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c index 7a23253a0..114bdc3a3 100644 --- a/hw/xfree86/common/xf86Config.c +++ b/hw/xfree86/common/xf86Config.c @@ -1459,8 +1459,9 @@ configInputDevices(XF86ConfLayoutPtr layout, serverLayoutPtr servlayoutp) while (irp) { indp[count] = xf86AllocateInput(); if (!configInput(indp[count], irp->iref_inputdev, X_CONFIG)) { - while(count--) + do { free(indp[count]); + } while(count--); free(indp); return FALSE; } From 719b37c33a89d6ad86c79097e5c67b9b3cea5aac Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Tue, 29 Mar 2011 20:04:24 +0300 Subject: [PATCH 14/23] xfree86: fix memory leak in xf86LoadModules Signed-off-by: Tiago Vignatti Signed-off-by: Alan Coopersmith Reviewed-by: Nicolas Peninguy Reviewed-by: Peter Hutterer --- hw/xfree86/common/xf86Init.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c index e664ce451..0b36163c0 100644 --- a/hw/xfree86/common/xf86Init.c +++ b/hw/xfree86/common/xf86Init.c @@ -1414,8 +1414,10 @@ xf86LoadModules(char **list, pointer *optlist) name = xf86NormalizeName(list[i]); /* Skip empty names */ - if (name == NULL || *name == '\0') + if (name == NULL || *name == '\0') { + free(name); continue; + } /* Replace obsolete keyboard driver with kbd */ if (!xf86NameCmp(name, "keyboard")) { From bafec9a25efa902bef2a3730dc44dc50f0e45877 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Mon, 28 Mar 2011 19:19:57 +0300 Subject: [PATCH 15/23] os: use DebugF for debugging Signed-off-by: Tiago Vignatti Reviewed-by: Peter Hutterer Reviewed-by: Nicolas Peninguy --- os/utils.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/os/utils.c b/os/utils.c index a365aca81..f47177f4f 100644 --- a/os/utils.c +++ b/os/utils.c @@ -1256,10 +1256,7 @@ System(char *command) perror("signal"); return -1; } - -#ifdef DEBUG - ErrorF("System: `%s'\n", command); -#endif + DebugF("System: `%s'\n", command); switch (pid = fork()) { case -1: /* error */ @@ -1371,9 +1368,7 @@ Popen(char *command, char *type) cur->next = pidlist; pidlist = cur; -#ifdef DEBUG - ErrorF("Popen: `%s', fp = %p\n", command, iop); -#endif + DebugF("Popen: `%s', fp = %p\n", command, iop); return iop; } @@ -1448,9 +1443,7 @@ Fopen(char *file, char *type) cur->next = pidlist; pidlist = cur; -#ifdef DEBUG - ErrorF("Fopen(%s), fp = %p\n", file, iop); -#endif + DebugF("Fopen(%s), fp = %p\n", file, iop); return iop; #else @@ -1479,10 +1472,7 @@ Pclose(pointer iop) int pstat; int pid; -#ifdef DEBUG - ErrorF("Pclose: fp = %p\n", iop); -#endif - + DebugF("Pclose: fp = %p\n", iop); fclose(iop); for (last = NULL, cur = pidlist; cur; last = cur, cur = cur->next) From a6c71ce5d2d2fe89e07a2ef5041c915acc3dc686 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Mon, 28 Mar 2011 19:21:28 +0300 Subject: [PATCH 16/23] os: fix memory and fd leaks in Popen Signed-off-by: Tiago Vignatti Reviewed-by: Peter Hutterer Reviewed-by: Nicolas Peninguy --- os/utils.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/os/utils.c b/os/utils.c index f47177f4f..36cb46f11 100644 --- a/os/utils.c +++ b/os/utils.c @@ -1315,6 +1315,9 @@ Popen(char *command, char *type) /* Ignore the smart scheduler while this is going on */ old_alarm = OsSignal(SIGALRM, SIG_IGN); if (old_alarm == SIG_ERR) { + close(pdes[0]); + close(pdes[1]); + free(cur); perror("signal"); return NULL; } From 6e5020f46165862ff09211d5425c8b6a13966303 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Mon, 28 Mar 2011 20:07:06 +0300 Subject: [PATCH 17/23] dix: fix memory leak in AllocPseudo Signed-off-by: Tiago Vignatti Reviewed-by: Peter Hutterer Reviewed-by: Nicolas Peninguy --- dix/colormap.c | 1 + 1 file changed, 1 insertion(+) diff --git a/dix/colormap.c b/dix/colormap.c index 2e9a80647..188378bec 100644 --- a/dix/colormap.c +++ b/dix/colormap.c @@ -1879,6 +1879,7 @@ AllocPseudo (int client, ColormapPtr pmap, int c, int r, Bool contig, { for (p = ppixTemp; p < ppixTemp + npix; p++) pmap->red[*p].refcnt = 0; + free(ppixTemp); return BadAlloc; } pmap->clientPixelsRed[client] = ppix; From c1875ac25b7b730d464c98c4c151c35efd64a562 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Mon, 28 Mar 2011 20:09:04 +0300 Subject: [PATCH 18/23] dix: fix memory leak in AllocShared Signed-off-by: Tiago Vignatti Reviewed-by: Peter Hutterer Reviewed-by: Nicolas Peninguy --- dix/colormap.c | 1 + 1 file changed, 1 insertion(+) diff --git a/dix/colormap.c b/dix/colormap.c index 188378bec..0e1feb6c4 100644 --- a/dix/colormap.c +++ b/dix/colormap.c @@ -2105,6 +2105,7 @@ AllocShared (ColormapPtr pmap, Pixel *ppix, int c, int r, int g, int b, { for (z++ ; z < npixShared; z++) free(ppshared[z]); + free(psharedList); return FALSE; } } From daae5e5de194757f7084f9b2b24353c34b961f19 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Mon, 28 Mar 2011 20:13:11 +0300 Subject: [PATCH 19/23] xi: fix memory leak in AddExtensionClient Signed-off-by: Tiago Vignatti Reviewed-by: Peter Hutterer Reviewed-by: Nicolas Peninguy --- Xi/exevents.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Xi/exevents.c b/Xi/exevents.c index 5b207bc4b..18803c95e 100644 --- a/Xi/exevents.c +++ b/Xi/exevents.c @@ -1607,14 +1607,18 @@ AddExtensionClient(WindowPtr pWin, ClientPtr client, Mask mask, int mskidx) if (!others) return BadAlloc; if (!pWin->optional->inputMasks && !MakeInputMasks(pWin)) - return BadAlloc; + goto bail; others->mask[mskidx] = mask; others->resource = FakeClientID(client->index); others->next = pWin->optional->inputMasks->inputClients; pWin->optional->inputMasks->inputClients = others; if (!AddResource(others->resource, RT_INPUTCLIENT, (pointer) pWin)) - return BadAlloc; + goto bail; return Success; + +bail: + free(others); + return BadAlloc; } static Bool From 90e03ab026cd8ffdc6202e6b8bae119717ee8528 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Tue, 29 Mar 2011 16:48:21 +0300 Subject: [PATCH 20/23] mi: fix memory leak in miZeroLine Signed-off-by: Tiago Vignatti Reviewed-by: Peter Hutterer Reviewed-by: Nicolas Peninguy --- mi/mizerline.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mi/mizerline.c b/mi/mizerline.c index 07cfbe113..7077b5198 100644 --- a/mi/mizerline.c +++ b/mi/mizerline.c @@ -157,9 +157,11 @@ miZeroLine( list_len = (height >= width) ? height : width; pspanInit = malloc(list_len * sizeof(DDXPointRec)); pwidthInit = malloc(list_len * sizeof(int)); - if (!pspanInit || !pwidthInit) + if (!pspanInit || !pwidthInit) { + free(pspanInit); + free(pwidthInit); return; - + } Nspans = 0; new_span = TRUE; spans = pspanInit - 1; From 0b288c8738a97cf6aa3f36aa5c05e7ac2a5cbca8 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Tue, 29 Mar 2011 16:54:14 +0300 Subject: [PATCH 21/23] dix: fix memory leak in ProcListExtensions Signed-off-by: Tiago Vignatti Reviewed-by: Peter Hutterer Reviewed-by: Nicolas Peninguy --- dix/extension.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dix/extension.c b/dix/extension.c index 6540b64b0..c7bbac5ff 100644 --- a/dix/extension.c +++ b/dix/extension.c @@ -353,9 +353,8 @@ ProcListExtensions(ClientPtr client) } WriteReplyToClient(client, sizeof(xListExtensionsReply), &reply); if (reply.length) - { WriteToClient(client, total_length, buffer); - free(buffer); - } + + free(buffer); return Success; } From 45b6667b651a0a26b17f64c9e99d70784045e4bf Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Tue, 29 Mar 2011 17:17:40 +0300 Subject: [PATCH 22/23] xkb: fix fd leak in XkbDDXListComponent Signed-off-by: Tiago Vignatti Reviewed-by: Peter Hutterer Reviewed-by: Nicolas Peninguy --- xkb/ddxList.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xkb/ddxList.c b/xkb/ddxList.c index 9623cb6aa..3d301d88e 100644 --- a/xkb/ddxList.c +++ b/xkb/ddxList.c @@ -222,8 +222,10 @@ char tmpname[PATH_MAX]; list->nFound[what]= 0; free(buf); buf = malloc(PATH_MAX * sizeof(char)); - if (!buf) + if (!buf) { + fclose(in); return BadAlloc; + } while ((status==Success)&&((tmp=fgets(buf,PATH_MAX,in))!=NULL)) { unsigned flags; register unsigned int i; From bc61787a20e7683cbc4dfa45fe855da98a8c0cd0 Mon Sep 17 00:00:00 2001 From: Tiago Vignatti Date: Tue, 29 Mar 2011 18:22:50 +0300 Subject: [PATCH 23/23] render: fix memory leaks in ProcRenderCompositeGlyphs Signed-off-by: Tiago Vignatti Reviewed-by: Peter Hutterer Reviewed-by: Nicolas Peninguy Reviewed-by: Soren Sandmann --- render/render.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/render/render.c b/render/render.c index 8ff8ee6f6..c5da6d78f 100644 --- a/render/render.c +++ b/render/render.c @@ -1372,8 +1372,10 @@ ProcRenderCompositeGlyphs (ClientPtr client) else { listsBase = (GlyphListPtr) malloc(nlist * sizeof (GlyphListRec)); - if (!listsBase) - return BadAlloc; + if (!listsBase) { + rc = BadAlloc; + goto bail; + } } buffer = (CARD8 *) (stuff + 1); glyphs = glyphsBase; @@ -1392,13 +1394,7 @@ ProcRenderCompositeGlyphs (ClientPtr client) GlyphSetType, client, DixUseAccess); if (rc != Success) - { - if (glyphsBase != glyphsLocal) - free(glyphsBase); - if (listsBase != listsLocal) - free(listsBase); - return rc; - } + goto bail; } buffer += 4; } @@ -1436,8 +1432,10 @@ ProcRenderCompositeGlyphs (ClientPtr client) lists++; } } - if (buffer > end) - return BadLength; + if (buffer > end) { + rc = BadLength; + goto bail; + } CompositeGlyphs (stuff->op, pSrc, @@ -1448,13 +1446,14 @@ ProcRenderCompositeGlyphs (ClientPtr client) nlist, listsBase, glyphsBase); + rc = Success; +bail: if (glyphsBase != glyphsLocal) free(glyphsBase); if (listsBase != listsLocal) free(listsBase); - - return Success; + return rc; } static int