winex11.drv: fix memory leak in create_cursor (found by Smatch)

James Hawkins truiken at gmail.com
Fri Aug 31 09:28:29 CDT 2007


On 8/31/07, Lionel_Debroux <lionel_debroux at yahoo.fr> wrote:
> create_cursor leaks some heap memory in an error path. Found in
> Michael Stefaniuc's list of Wine potential bugs detected by Smatch.
>
> I'm almost sure that the other potential memory leak detected by Smatch,
> in the same function, is NOTABUG. Indeed, bitMask32 is conditionally
> freed at line 850, if the number of bits per pixel (ptr->bBitsPerPixel)
> is 32 - which is the condition which led to bitMask32 being allocated,
> at line 639.
>
> 2007-08-31  Lionel Debroux <lionel_debroux at yahoo.fr>
>        * dlls/winex11.drv/mouse.c:
>        winex11.drv: Fix memory leak in create_cursor (found by Smatch)
>
> >From d62a874a6d399546940a97fc3d800a692c08b362 Mon Sep 17 00:00:00 2001
> From: Lionel Debroux <lionel_debroux at yahoo.fr>
> Date: Fri, 31 Aug 2007 08:16:36 +0200
> Subject: winex11.drv: fix memory leak in create_cursor (found by Smatch).
>
> ---
>  dlls/winex11.drv/mouse.c |    2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
>
> diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
> index 86dad89..d8bf30a 100644
> --- a/dlls/winex11.drv/mouse.c
> +++ b/dlls/winex11.drv/mouse.c
> @@ -763,6 +763,8 @@ static Cursor create_cursor( Display *display, CURSORICONINFO *ptr )
>              pixmapBits = XCreateBitmapFromData( display, root_window, (char *)pXorBits, xmax, ymax );
>              if (!pixmapBits)
>              {
> +                if (bitMask32)
> +                    HeapFree( GetProcessHeap(), 0, bitMask32 );
>                  XFreePixmap( display, pixmapAll );
>

You shouldn't be checking bitMask32 for NULL before freeing it.

-- 
James Hawkins



More information about the wine-devel mailing list