oleaut - SysAllocString/SysFreeString

Michael Stefaniuc mstefani at redhat.com
Fri Oct 2 05:56:11 CDT 2009


Hello!

Markus Stockhausen wrote:
> maybe this topic has discussed before but I did not find any threads in
> the devel mailing list for the last months. Additionally i followed wine
> development for only a few weeks. So here we go ...
> 
> oleaut.c in native Windows has some type of "heap reusage" when working
> with strings. This can be unconvered when placing debug messages into
> IMalloc_xxx functions. A sequence of SysAllocString, SysFreeString will
> show something like that:
> 
> Alloc
>   olemalloc:IMalloc_fnAlloc (0x7ec47df8, 16) - addr is 0x12a1b8
> Free
>   olemalloc:IMalloc_fnGetSize (0x12a1b8) - 16
> Alloc
>   nothing
> Free
>   olemalloc:IMalloc_fnGetSize (0x12a1b8) - 16
> 
> When exiting the program one can see a message like this
> 
> olemalloc:IMalloc_fnFree (0x7ec47df8, 0x12a1b8)
> 
> In Wine the heap will be released immediately. Why sould that be of any
> concern you may ask. This behaviour makes some buggy applications run
> with native oleaut32 (see bug 12460). In this case the application
> copies the contents of a string directly after it has been freed. Wine
> corrupts the heap in between and the application will crash.
> 
> My question is: Should this behaviour declared as "application is buggy
> & will not be fixed" or has a patch a chance to find its way into git?
The best thing is to write a test for this behavior and test it on
different Windows versions. If even Windows 7 behaves that way I figure
we'll have to provide that "feature" too. Else the application is buggy
and won't work on all Windows versions either.

bye
	michael

> An idea would be an deferred free like this.
> 
> - TlsAlloc on entry of dll.
> 
> - SysFreeString
>   TlsGetValue for last address
>   if value is set FreeHeap(address)
>   TlsSetValue for current address
> 
> - on exit of dll do some cleanup (heap & Tls)
> 
> Of course this behaviour is far away from the oleaut implementation and
> will consume some more CPU cycles.
> 
> Thanks for your feedback in inadvance.



More information about the wine-devel mailing list