Make MISC extention's PassMessage() actually work and fix memory leaks

This commit is contained in:
Thomas Winischhofer 2004-12-15 00:32:56 +00:00
parent d0b17bda4d
commit c7fec26b50

View File

@ -582,14 +582,22 @@ ProcXF86MiscPassMessage(client)
strncpy(msgtype,(char*)(&stuff[1]),stuff->typelen); strncpy(msgtype,(char*)(&stuff[1]),stuff->typelen);
} else return BadValue; } else return BadValue;
if (stuff->vallen) { if (stuff->vallen) {
if (!(msgval = xalloc(stuff->vallen))) if (!(msgval = xalloc(stuff->vallen))) {
xfree(msgtype);
return BadAlloc; return BadAlloc;
strncpy(msgval,(char*)(&stuff[1] + ((stuff->typelen + 3) & ~3)), }
strncpy(msgval,(char*)((char*)&stuff[1] + ((stuff->typelen + 3) & ~3)),
stuff->vallen); 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; return retval;
}
rep.type = X_Reply; rep.type = X_Reply;
rep.sequenceNumber = client->sequence; rep.sequenceNumber = client->sequence;
@ -607,6 +615,9 @@ ProcXF86MiscPassMessage(client)
if (rep.mesglen) if (rep.mesglen)
WriteToClient(client, rep.mesglen, (char *)retstr); WriteToClient(client, rep.mesglen, (char *)retstr);
xfree(msgtype);
xfree(msgval);
return (client->noClientException); return (client->noClientException);
} }