Fixed bug 2502 - Memory leak inside SDL_x11events.c -> X11_DispatchEvent(_THIS)

bojko_1000

Code @566:
            if (data->xwindow) {
                Atom _net_frame_extents = X11_XInternAtom(display, "_NET_FRAME_EXTENTS", 0);
                Atom type = None;
                int format;
                unsigned long nitems = 0, bytes_after;
                unsigned char *property;
                X11_XGetWindowProperty(display, data->xwindow,
                    _net_frame_extents, 0, 16, 0,
                    XA_CARDINAL, &type, &format,
                    &nitems, &bytes_after, &property);

                if (type != None && nitems == 4)
                {
                    border_left = ((long*)property)[0];
                    border_right = ((long*)property)[1];
                    border_top = ((long*)property)[2];
                    border_bottom = ((long*)property)[3];
                }
            }

Code after _the fix_:
            if (data->xwindow) {
                Atom _net_frame_extents = X11_XInternAtom(display, "_NET_FRAME_EXTENTS", 0);
                Atom type = None;
                int format;
                unsigned long nitems = 0, bytes_after;
                unsigned char *property;
                X11_XGetWindowProperty(display, data->xwindow,
                    _net_frame_extents, 0, 16, 0,
                    XA_CARDINAL, &type, &format,
                    &nitems, &bytes_after, &property);

                if (type != None && nitems == 4)
                {
                    border_left = ((long*)property)[0];
                    border_right = ((long*)property)[1];
                    border_top = ((long*)property)[2];
                    border_bottom = ((long*)property)[3];
                }
                X11_XFree(property);
            }

I have found that leak with valgrind.
Sam Lantinga 2014-04-17 20:02:11 -07:00
parent f4b77110d2
commit f6953cf4c2
1 changed files with 12 additions and 11 deletions

View File

@ -563,19 +563,20 @@ X11_DispatchEvent(_THIS)
long border_top = 0; long border_top = 0;
if (data->xwindow) { if (data->xwindow) {
Atom _net_frame_extents = X11_XInternAtom(display, "_NET_FRAME_EXTENTS", 0); Atom _net_frame_extents = X11_XInternAtom(display, "_NET_FRAME_EXTENTS", 0);
Atom type = None; Atom type;
int format; int format;
unsigned long nitems = 0, bytes_after; unsigned long nitems, bytes_after;
unsigned char *property; unsigned char *property;
X11_XGetWindowProperty(display, data->xwindow, if (X11_XGetWindowProperty(display, data->xwindow,
_net_frame_extents, 0, 16, 0, _net_frame_extents, 0, 16, 0,
XA_CARDINAL, &type, &format, XA_CARDINAL, &type, &format,
&nitems, &bytes_after, &property); &nitems, &bytes_after, &property) == Success) {
if (type != None && nitems == 4)
if (type != None && nitems == 4) {
{ border_left = ((long*)property)[0];
border_left = ((long*)property)[0]; border_top = ((long*)property)[2];
border_top = ((long*)property)[2]; }
X11_XFree(property);
} }
} }