[Mesa-dev] [PATCH 3/4] xlib: fix leaks of returned values from XGetVisualInfo
John Sheu
sheu at google.com
Fri Apr 1 23:52:21 UTC 2016
---
src/mesa/drivers/x11/fakeglx.c | 29 +++++++++++++++++++++--------
1 file changed, 21 insertions(+), 8 deletions(-)
diff --git a/src/mesa/drivers/x11/fakeglx.c b/src/mesa/drivers/x11/fakeglx.c
index 208fc5bb..508dc65e 100644
--- a/src/mesa/drivers/x11/fakeglx.c
+++ b/src/mesa/drivers/x11/fakeglx.c
@@ -730,27 +730,39 @@ choose_x_overlay_visual( Display *dpy, int scr,
vislist = XGetVisualInfo( dpy, VisualIDMask | VisualScreenMask,
&vistemplate, &count );
+ if (!vislist) {
+ /* no matches */
+ continue;
+ }
+
if (count!=1) {
/* something went wrong */
+ free(vislist);
continue;
}
if (preferred_class!=DONT_CARE && preferred_class!=vislist->CLASS) {
/* wrong visual class */
+ free(vislist);
continue;
}
/* Color-index rendering is not supported. Make sure we have True/DirectColor */
- if (vislist->CLASS != TrueColor && vislist->CLASS != DirectColor)
+ if (vislist->CLASS != TrueColor && vislist->CLASS != DirectColor) {
+ free(vislist);
continue;
+ }
- if (deepvis==NULL || vislist->depth > deepest) {
- /* YES! found a satisfactory visual */
- free(deepvis);
- deepest = vislist->depth;
- deepvis = vislist;
- /* DEBUG tt = ov->transparent_type;*/
- /* DEBUG tv = ov->value; */
+ if (deepvis!=NULL && vislist->depth <= deepest) {
+ free(vislist);
+ continue;
}
+
+ /* YES! found a satisfactory visual */
+ free(deepvis);
+ deepest = vislist->depth;
+ deepvis = vislist;
+ /* DEBUG tt = ov->transparent_type;*/
+ /* DEBUG tv = ov->value; */
}
/*DEBUG
@@ -1912,6 +1924,7 @@ Fake_glXGetFBConfigs( Display *dpy, int screen, int *nelements )
for (i = 0; i < *nelements; i++) {
results[i] = create_glx_visual(dpy, visuals + i);
}
+ free(visuals);
return (GLXFBConfig *) results;
}
return NULL;
--
2.8.0.rc3.226.g39d4020
More information about the mesa-dev
mailing list