rem: free(data);
add: wfree(data);
context: W_HandleSelectionEvent(XEvent *event){    SelectionHandler *handler;    handler = selHandlers;    while (handler) {	if (WMWidgetXID(handler->widget)==event->xany.window/*	    && handler->selection == event->selection*/) {	    switch (event->type) {	     case SelectionClear:		if (handler->loseProc)		    (*handler->loseProc)(handler->widget, handler->selection);		break;	     case SelectionRequest:		if (handler->convProc) {		    Atom atom;		    void *data;		    unsigned length;		    int format;		    Atom prop;		    /* they're requesting for something old */		    if (event->xselectionrequest.time < handler->timestamp			&& event->xselectionrequest.time != CurrentTime) {			notifySelection(event, None);			break;		    }		    handler->flags.done_pending = 1;		    if (!(*handler->convProc)(handler->widget,					     handler->selection,					     event->xselectionrequest.target,					     &atom, &data, &length, &format)) {			notifySelection(event, None);			break;		    }		    		    prop = event->xselectionrequest.property;		    /* obsolete clients that don't set the property field */		    if (prop == None)			prop = event->xselectionrequest.target;		    if (!writeSelection(event->xselectionrequest.display,					event->xselectionrequest.requestor,					prop, atom, data, length, format)) {			free(data);			notifySelection(event, None);			break;		    }		    free(data);		    notifySelection(event, prop);		    if (handler->doneProc) {			(*handler->doneProc)(handler->widget, 					     handler->selection,					     event->xselectionrequest.target);		    }		    handler->flags.done_pending = 0;		    /* in case the handler was deleted from some		     * callback */		    if (handler->flags.delete_pending) {			WMDeleteSelectionHandler(handler->widget,						 handler->selection);		    }		}		break;	     case SelectionNotify:				break;	    }	}	handler = handler->next;    }}