On 8/31/07, Lionel_Debroux lionel_debroux@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@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@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.