[PATCH:libX11 1/2] XCreate{Pix, Bit}map...Data: Free pixmap in error path if XCreateGC fails

Aaron Plattner aplattner at nvidia.com
Mon Jul 2 14:25:54 PDT 2012


On 06/29/2012 11:11 PM, Alan Coopersmith wrote:
> Fixes leaks in error paths found by Parfait 1.0.0:
>
> Error: X Resource Leak
>     Leaked X Resource pix
>          at line 62 of CrBFData.c in function 'XCreateBitmapFromData'.
>            pix initialized at line 60 with XCreatePixmap
> Error: X Resource Leak
>     Leaked X Resource pix
>          at line 70 of CrPFBData.c in function 'XCreatePixmapFromBitmapData'.
>            pix initialized at line 66 with XCreatePixmap
>
> Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>

Reviewed-by: Aaron Plattner <aplattner at nvidia.com>

-- Aaron

> ---
>   src/CrBFData.c  |    7 +++++--
>   src/CrPFBData.c |    7 +++++--
>   2 files changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/src/CrBFData.c b/src/CrBFData.c
> index 4490956..9515875 100644
> --- a/src/CrBFData.c
> +++ b/src/CrBFData.c
> @@ -58,8 +58,11 @@ Pixmap XCreateBitmapFromData(
>       Pixmap pix;
>
>       pix = XCreatePixmap(display, d, width, height, 1);
> -    if (! (gc = XCreateGC(display, pix, (unsigned long) 0, (XGCValues *) 0)))
> -	return (Pixmap) None;
> +    gc = XCreateGC(display, pix, (unsigned long) 0, (XGCValues *) 0);
> +    if (gc == NULL) {
> +        XFreePixmap(display, pix);
> +        return (Pixmap) None;
> +    }
>       ximage.height = height;
>       ximage.width = width;
>       ximage.depth = 1;
> diff --git a/src/CrPFBData.c b/src/CrPFBData.c
> index 57cd153..d343420 100644
> --- a/src/CrPFBData.c
> +++ b/src/CrPFBData.c
> @@ -66,8 +66,11 @@ Pixmap XCreatePixmapFromBitmapData(
>       pix = XCreatePixmap(display, d, width, height, depth);
>       gcv.foreground = fg;
>       gcv.background = bg;
> -    if (! (gc = XCreateGC(display, pix, GCForeground|GCBackground, &gcv)))
> -	return (Pixmap) NULL;
> +    gc = XCreateGC(display, pix, GCForeground|GCBackground, &gcv);
> +    if (gc == NULL) {
> +        XFreePixmap(display, pix);
> +        return (Pixmap) None;
> +    }
>       ximage.height = height;
>       ximage.width = width;
>       ximage.depth = 1;
>




More information about the xorg-devel mailing list