Bug in dlls/comctl32/comctl32undoc.c

Sascha Cunz sascha.cunz at tiscali.de
Sat Jul 2 15:12:35 CDT 2005


Hi,

> > In lines 1944 and 1977 of dlls/comctl32/comctl32undoc.c the value
> > "0x7FFF" is used to check for the boundary of a 32 bit integer. However,
> > there should be used MAX_INT instead.

> I somehow doubt that this function will ever encounter an INT greater
> than MAX_INT... :)

you're of course right here.

> Anyway, I agree that the current behaviour looks at least suspicious.
> It was implemented by Dimi Paun in 2002
> (http://www.winehq.com/hypermail/wine-patches/2002/10/0313.html).
>
> However, it seems it was or is just hiding another bug - I did some
> testing on Win95, Win98 and Win2k3 and I can't reproduce that behaviour
> - lists with >0x8000 elements seem to work just fine.
>
> And since those functions are fairly generic and documented for several
> years now it's quite possible that third-party apps use them for arrays
> with more than 0x8000 elements...
>
> > By the way: Looking at current MSDN, DPA and DSA looks rather documented
> > than "undoc" :-)
>
> Right (they were undocumented for a long time though).

Well, the "insert"-function uses the value 0x7fff as a flag to the 
"set"-function (to set a pointer at the end of the list). So i guess, what 
was actually meant is to check on equality to MAX_INT.

However, this is used from treeview.c. Where i encountered the problem 
inserting more than 0x7fff entries.

Sascha



More information about the wine-devel mailing list