Rolf Kalbermatter wrote:

DanteAliegri <[EMAIL PROTECTED]> wrote:


Hey, I've come across what appears to be a
simple problem in comctl32.
When running icq99b, wine was dying in imagelist.c while trying to dereference a null pointer.
Upon looking at the file, there was code for returning FALSE if that pointer was null, thus I felt it being null may be a valid choice.
I made the attached change, and the problem was fixed.
Comments?

--- imagelist.c 23 Oct 2002 22:19:11 -0000 1.65
+++ imagelist.c 2 Nov 2002 20:40:53 -0000
@@ -1082,11 +1082,14 @@
HBITMAP hImageBmp, hOldImageBmp, hOldImageListBmp, hOldMaskListBmp,
hBlendMaskBmp;
BOOL bIsTransparent, bBlend, bResult = FALSE;
const HIMAGELIST himl = pimldp->himl;

^^^^^^^^^^^^
According to the same lines pimldp could also be NULL so this might as
well cause a NULL pointer dereference and should be moved to after the
check for "if (!pimldp || !(himl = pimldp->himl)) return FALSE;

Of course the question remains why would you call the function at all
with a NULL pointer.

That is a good question. I didn't do any looking into this; however the function that this is in is
BOOL WINAPI ImageList_DrawIndirect (IMAGELISTDRAWPARAMS *pimldp)
So pimldp and himl aren't handed to that function.
I was thinking that it had something do to with asking it to draw something that you hadn't given the images for yet
( so some program that just does while( 1 ) { draw() ; maybe_add_a_picture(); } ) as some way to make best response,
or something silly like that.


- const INT lx = himl->cx * pimldp->i + pimldp->xBitmap;
- const INT ly = pimldp->yBitmap;
+ static INT lx;
+ static INT ly;

Should this be really static? Can't this function be called reentrant?


well, static is no worse than const ;)
but I'll leave that to dimitrie.
I was simply trying to cause as few changes as possible, and changing it to static would make it a global , rather than
a stack variable, the same as const.

-Dante




Reply via email to