[Mesa-dev] [PATCH 3/4] xlib: fix leaks of returned values from XGetVisualInfo

Alejandro Piñeiro apinheiro at igalia.com
Mon Apr 4 06:51:53 UTC 2016


Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>

On 02/04/16 01:52, John Sheu wrote:
> ---
>  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;



More information about the mesa-dev mailing list