A problem with comctl32

DanteAliegri dantealiegri at umbc.edu
Mon Nov 4 06:33:10 CST 2002


Rolf Kalbermatter wrote:

>DanteAliegri <dantealiegri at umbc.edu> 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




More information about the wine-devel mailing list