Skip to content

Commit

Permalink
Fixed bug 5339 - Minor memory leak in SDL_x11events.c
Browse files Browse the repository at this point in the history
wcodelyokoyt

The atom name that X11_GetAtomName() returns never gets freed, which result in a minor memory leak (14 bytes?) every time the user drops a file on a window.
You can see the line in question here:
https://github.com/spurious/SDL-mirror/blob/6b6170caf69b4189c9a9d14fca96e97f09bbcc41/src/video/x11/SDL_x11events.c#L1350

Fix: call XFree on name after the while loop.
  • Loading branch information
slouken committed Nov 9, 2020
1 parent 723d76c commit 1ef45c1
Showing 1 changed file with 14 additions and 11 deletions.
25 changes: 14 additions & 11 deletions src/video/x11/SDL_x11events.c
Expand Up @@ -1378,19 +1378,22 @@ X11_DispatchEvent(_THIS)
X11_ReadProperty(&p, display, data->xwindow, videodata->PRIMARY);

if (p.format == 8) {
char* saveptr = NULL;
char* name = X11_XGetAtomName(display, target);
char *token = SDL_strtokr((char *) p.data, "\r\n", &saveptr);
while (token != NULL) {
if (SDL_strcmp("text/plain", name)==0) {
SDL_SendDropText(data->window, token);
} else if (SDL_strcmp("text/uri-list", name)==0) {
char *fn = X11_URIToLocal(token);
if (fn) {
SDL_SendDropFile(data->window, fn);
char *saveptr = NULL;
char *name = X11_XGetAtomName(display, target);
if (name) {
char *token = SDL_strtokr((char *) p.data, "\r\n", &saveptr);
while (token != NULL) {
if (SDL_strcmp("text/plain", name) == 0) {
SDL_SendDropText(data->window, token);
} else if (SDL_strcmp("text/uri-list", name) == 0) {
char *fn = X11_URIToLocal(token);
if (fn) {
SDL_SendDropFile(data->window, fn);
}
}
token = SDL_strtokr(NULL, "\r\n", &saveptr);
}
token = SDL_strtokr(NULL, "\r\n", &saveptr);
X11_XFree(name);
}
SDL_SendDropComplete(data->window);
}
Expand Down

0 comments on commit 1ef45c1

Please sign in to comment.