Fix memory leaks
The return values of XGetAtomName() have to be freed with XFree().
This commit is contained in:
parent
85f99edd65
commit
116e125139
54
xclip.c
54
xclip.c
@ -220,11 +220,15 @@ xclip_provide_selection(XSelectionRequestEvent * req, Atom type, unsigned int fo
|
|||||||
uint32 length)
|
uint32 length)
|
||||||
{
|
{
|
||||||
XEvent xev;
|
XEvent xev;
|
||||||
|
char *target_name, *property_name;
|
||||||
|
|
||||||
|
target_name = XGetAtomName(g_display, req->target);
|
||||||
|
property_name = XGetAtomName(g_display, req->property);
|
||||||
logger(Clipboard, Debug,
|
logger(Clipboard, Debug,
|
||||||
"xclip_provide_selection(), requestor=0x%08x, target=%s, property=%s, length=%u",
|
"xclip_provide_selection(), requestor=0x%08x, target=%s, property=%s, length=%u",
|
||||||
(unsigned) req->requestor, XGetAtomName(g_display, req->target),
|
(unsigned) req->requestor, target_name, property_name, (unsigned) length);
|
||||||
XGetAtomName(g_display, req->property), (unsigned) length);
|
XFree(target_name);
|
||||||
|
XFree(property_name);
|
||||||
|
|
||||||
XChangeProperty(g_display, req->requestor, req->property,
|
XChangeProperty(g_display, req->requestor, req->property,
|
||||||
type, format, PropModeReplace, data, length);
|
type, format, PropModeReplace, data, length);
|
||||||
@ -247,11 +251,15 @@ static void
|
|||||||
xclip_refuse_selection(XSelectionRequestEvent * req)
|
xclip_refuse_selection(XSelectionRequestEvent * req)
|
||||||
{
|
{
|
||||||
XEvent xev;
|
XEvent xev;
|
||||||
|
char *target_name, *property_name;
|
||||||
|
|
||||||
|
target_name = XGetAtomName(g_display, req->target);
|
||||||
|
property_name = XGetAtomName(g_display, req->property);
|
||||||
logger(Clipboard, Debug,
|
logger(Clipboard, Debug,
|
||||||
"xclip_refuse_selection(), requestor=0x%08x, target=%s, property=%s",
|
"xclip_refuse_selection(), requestor=0x%08x, target=%s, property=%s",
|
||||||
(unsigned) req->requestor, XGetAtomName(g_display, req->target),
|
(unsigned) req->requestor, target_name, property_name);
|
||||||
XGetAtomName(g_display, req->property));
|
XFree(target_name);
|
||||||
|
XFree(property_name);
|
||||||
|
|
||||||
xev.xselection.type = SelectionNotify;
|
xev.xselection.type = SelectionNotify;
|
||||||
xev.xselection.serial = 0;
|
xev.xselection.serial = 0;
|
||||||
@ -292,8 +300,12 @@ helper_cliprdr_send_empty_response()
|
|||||||
static RD_BOOL
|
static RD_BOOL
|
||||||
xclip_send_data_with_convert(uint8 * source, size_t source_size, Atom target)
|
xclip_send_data_with_convert(uint8 * source, size_t source_size, Atom target)
|
||||||
{
|
{
|
||||||
|
char *target_name;
|
||||||
|
|
||||||
|
target_name = XGetAtomName(g_display, target);
|
||||||
logger(Clipboard, Debug, "xclip_send_data_with_convert(), target=%s, size=%u",
|
logger(Clipboard, Debug, "xclip_send_data_with_convert(), target=%s, size=%u",
|
||||||
XGetAtomName(g_display, target), (unsigned) source_size);
|
target_name, (unsigned) source_size);
|
||||||
|
XFree(target_name);
|
||||||
|
|
||||||
#ifdef USE_UNICODE_CLIPBOARD
|
#ifdef USE_UNICODE_CLIPBOARD
|
||||||
if (target == format_string_atom ||
|
if (target == format_string_atom ||
|
||||||
@ -513,14 +525,20 @@ xclip_handle_SelectionNotify(XSelectionEvent * event)
|
|||||||
Atom *supported_targets;
|
Atom *supported_targets;
|
||||||
int res, format;
|
int res, format;
|
||||||
uint8 *data = NULL;
|
uint8 *data = NULL;
|
||||||
|
char *selection_name, *target_name, *property_name;
|
||||||
|
|
||||||
if (event->property == None)
|
if (event->property == None)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
selection_name = XGetAtomName(g_display, event->selection);
|
||||||
|
target_name = XGetAtomName(g_display, event->target);
|
||||||
|
property_name = XGetAtomName(g_display, event->property);
|
||||||
logger(Clipboard, Debug,
|
logger(Clipboard, Debug,
|
||||||
"xclip_handle_SelectionNotify(), selection=%s, target=%s, property=%s",
|
"xclip_handle_SelectionNotify(), selection=%s, target=%s, property=%s",
|
||||||
XGetAtomName(g_display, event->selection), XGetAtomName(g_display, event->target),
|
selection_name, target_name, property_name);
|
||||||
XGetAtomName(g_display, event->property));
|
XFree(selection_name);
|
||||||
|
XFree(target_name);
|
||||||
|
XFree(property_name);
|
||||||
|
|
||||||
if (event->target == timestamp_atom)
|
if (event->target == timestamp_atom)
|
||||||
{
|
{
|
||||||
@ -643,9 +661,11 @@ xclip_handle_SelectionNotify(XSelectionEvent * event)
|
|||||||
supported_targets = (Atom *) data;
|
supported_targets = (Atom *) data;
|
||||||
for (i = 0; i < nitems; i++)
|
for (i = 0; i < nitems; i++)
|
||||||
{
|
{
|
||||||
|
target_name = XGetAtomName(g_display, supported_targets[i]);
|
||||||
logger(Clipboard, Debug,
|
logger(Clipboard, Debug,
|
||||||
"xclip_handle_SelectionNotify(), target %d: %s", i,
|
"xclip_handle_SelectionNotify(), target %d: %s", i,
|
||||||
XGetAtomName(g_display, supported_targets[i]));
|
target_name);
|
||||||
|
XFree(target_name);
|
||||||
if (supported_targets[i] == format_string_atom)
|
if (supported_targets[i] == format_string_atom)
|
||||||
{
|
{
|
||||||
if (text_target_satisfaction < 1)
|
if (text_target_satisfaction < 1)
|
||||||
@ -782,11 +802,17 @@ xclip_handle_SelectionRequest(XSelectionRequestEvent * event)
|
|||||||
unsigned char *prop_return = NULL;
|
unsigned char *prop_return = NULL;
|
||||||
int format, res;
|
int format, res;
|
||||||
Atom type;
|
Atom type;
|
||||||
|
char *selection_name, *target_name, *property_name;
|
||||||
|
|
||||||
|
selection_name = XGetAtomName(g_display, event->selection);
|
||||||
|
target_name = XGetAtomName(g_display, event->target);
|
||||||
|
property_name = XGetAtomName(g_display, event->property);
|
||||||
logger(Clipboard, Debug,
|
logger(Clipboard, Debug,
|
||||||
"xclip_handle_SelectionRequest(), selection=%s, target=%s, property=%s",
|
"xclip_handle_SelectionRequest(), selection=%s, target=%s, property=%s",
|
||||||
XGetAtomName(g_display, event->selection), XGetAtomName(g_display, event->target),
|
selection_name, target_name, property_name);
|
||||||
XGetAtomName(g_display, event->property));
|
XFree(selection_name);
|
||||||
|
XFree(target_name);
|
||||||
|
XFree(property_name);
|
||||||
|
|
||||||
if (event->target == targets_atom)
|
if (event->target == targets_atom)
|
||||||
{
|
{
|
||||||
@ -856,9 +882,11 @@ xclip_handle_SelectionRequest(XSelectionRequestEvent * event)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
target_name = XGetAtomName(g_display, event->target);
|
||||||
logger(Clipboard, Warning,
|
logger(Clipboard, Warning,
|
||||||
"xclip_handle_SelectionRequest(), unsupported target format, target='%s'",
|
"xclip_handle_SelectionRequest(), unsupported target format, target='%s'",
|
||||||
XGetAtomName(g_display, event->target));
|
target_name);
|
||||||
|
XFree(target_name);
|
||||||
xclip_refuse_selection(event);
|
xclip_refuse_selection(event);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1052,9 +1080,11 @@ ui_clip_handle_data(uint8 * data, uint32 length)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
char *target_name = XGetAtomName(g_display, selection_request.target);
|
||||||
logger(Clipboard, Debug,
|
logger(Clipboard, Debug,
|
||||||
"ui_clip_handle_data(), no handler for selection target '%s'",
|
"ui_clip_handle_data(), no handler for selection target '%s'",
|
||||||
XGetAtomName(g_display, selection_request.target));
|
target_name);
|
||||||
|
XFree(target_name);
|
||||||
xclip_refuse_selection(&selection_request);
|
xclip_refuse_selection(&selection_request);
|
||||||
has_selection_request = False;
|
has_selection_request = False;
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user