[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