From c7fec26b50f8a64360d1252cdf48370935fb2f76 Mon Sep 17 00:00:00 2001 From: Thomas Winischhofer Date: Wed, 15 Dec 2004 00:32:56 +0000 Subject: [PATCH] Make MISC extention's PassMessage() actually work and fix memory leaks --- hw/xfree86/dixmods/extmod/xf86misc.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/hw/xfree86/dixmods/extmod/xf86misc.c b/hw/xfree86/dixmods/extmod/xf86misc.c index 620761742..ac47be7ad 100644 --- a/hw/xfree86/dixmods/extmod/xf86misc.c +++ b/hw/xfree86/dixmods/extmod/xf86misc.c @@ -582,14 +582,22 @@ ProcXF86MiscPassMessage(client) strncpy(msgtype,(char*)(&stuff[1]),stuff->typelen); } else return BadValue; if (stuff->vallen) { - if (!(msgval = xalloc(stuff->vallen))) + if (!(msgval = xalloc(stuff->vallen))) { + xfree(msgtype); return BadAlloc; - strncpy(msgval,(char*)(&stuff[1] + ((stuff->typelen + 3) & ~3)), + } + strncpy(msgval,(char*)((char*)&stuff[1] + ((stuff->typelen + 3) & ~3)), stuff->vallen); - } else return BadValue; + } else { + xfree(msgtype); + return BadValue; + } - if ((retval= MiscExtPassMessage(stuff->screen,msgtype,msgval,&retstr)) != 0) + if ((retval = MiscExtPassMessage(stuff->screen,msgtype,msgval,&retstr)) != 0) { + xfree(msgtype); + xfree(msgval); return retval; + } rep.type = X_Reply; rep.sequenceNumber = client->sequence; @@ -607,6 +615,9 @@ ProcXF86MiscPassMessage(client) if (rep.mesglen) WriteToClient(client, rep.mesglen, (char *)retstr); + xfree(msgtype); + xfree(msgval); + return (client->noClientException); }