X11: Fix potential window property data leaks

This commit is contained in:
Camilla Löwy 2017-01-16 01:36:14 +01:00
parent fa21cd13d2
commit 0735250eb1
2 changed files with 22 additions and 20 deletions

View File

@ -381,13 +381,11 @@ static void detectEWMH(void)
XInternAtom(_glfw.x11.display, "_NET_SUPPORTED", False);
// Then we look for the _NET_SUPPORTING_WM_CHECK property of the root window
if (_glfwGetWindowPropertyX11(_glfw.x11.root,
supportingWmCheck,
XA_WINDOW,
(unsigned char**) &windowFromRoot) != 1)
if (!_glfwGetWindowPropertyX11(_glfw.x11.root,
supportingWmCheck,
XA_WINDOW,
(unsigned char**) &windowFromRoot))
{
if (windowFromRoot)
XFree(windowFromRoot);
return;
}
@ -395,14 +393,12 @@ static void detectEWMH(void)
// It should be the ID of a child window (of the root)
// Then we look for the same property on the child window
if (_glfwGetWindowPropertyX11(*windowFromRoot,
supportingWmCheck,
XA_WINDOW,
(unsigned char**) &windowFromChild) != 1)
if (!_glfwGetWindowPropertyX11(*windowFromRoot,
supportingWmCheck,
XA_WINDOW,
(unsigned char**) &windowFromChild))
{
XFree(windowFromRoot);
if (windowFromChild)
XFree(windowFromChild);
return;
}
@ -455,7 +451,8 @@ static void detectEWMH(void)
_glfw.x11.NET_REQUEST_FRAME_EXTENTS =
getSupportedAtom(supportedAtoms, atomCount, "_NET_REQUEST_FRAME_EXTENTS");
XFree(supportedAtoms);
if (supportedAtoms)
XFree(supportedAtoms);
}
// Initialize X11 display and look for supported X11 extensions

View File

@ -130,7 +130,9 @@ static int getWindowState(_GLFWwindow* window)
result = state->state;
}
XFree(state);
if (state)
XFree(state);
return result;
}
@ -1324,7 +1326,8 @@ static void processEvent(XEvent *event)
free(paths);
}
XFree(data);
if (data)
XFree(data);
XEvent reply;
memset(&reply, 0, sizeof(reply));
@ -1481,9 +1484,6 @@ unsigned long _glfwGetWindowPropertyX11(Window window,
&bytesAfter,
value);
if (type != AnyPropertyType && actualType != type)
return 0;
return itemCount;
}
@ -2042,7 +2042,9 @@ int _glfwPlatformWindowMaximized(_GLFWwindow* window)
}
}
XFree(states);
if (states)
XFree(states);
return maximized;
}
@ -2107,6 +2109,8 @@ void _glfwPlatformSetWindowFloating(_GLFWwindow* window, GLFWbool enabled)
_glfw.x11.NET_WM_STATE,
XA_ATOM,
(unsigned char**) &states);
if (!states)
return;
if (enabled)
{
@ -2396,7 +2400,8 @@ const char* _glfwPlatformGetClipboardString(_GLFWwindow* window)
_glfw.x11.clipboardString = strdup(data);
}
XFree(data);
if (data)
XFree(data);
XDeleteProperty(_glfw.x11.display,
event.xselection.requestor,