mirror of
				https://github.com/libsdl-org/SDL.git
				synced 2025-10-26 12:27:44 +00:00 
			
		
		
		
	Fixed bug 5339 - Minor memory leak in SDL_x11events.c
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:
6b6170caf6/src/video/x11/SDL_x11events.c (L1350)
Fix: call XFree on name after the while loop.
			
			
This commit is contained in:
		| @@ -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); | ||||
|                 } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sam Lantinga
					Sam Lantinga