http://bugs.winehq.org/show_bug.cgi?id=11259
--- Comment #5 from Anastasius Focht focht@gmx.net 2008-01-24 08:21:09 --- Hello,
this recent commit should fix the problem by allowing access to bits past the valid physical bits range: http://source.winehq.org/git/wine.git/?a=commit;h=a7cdf6e110e8d5caaafd59e4f8...
The X11DRV_DIB_FaultHandler now includes size of last touched page when calculating phys bitmap memory range.
--- snip --- ... 0009:trace:bitmap:X11DRV_DIB_Unlock Unlocked 0xe78 0009:trace:seh:raise_exception code=c0000005 flags=0 addr=0x6e10e4 0009:trace:seh:raise_exception info[0]=00000001 0009:trace:seh:raise_exception info[1]=00ab4380 0009:trace:seh:raise_exception eax=00000083 ebx=00ab4380 ecx=0000003e edx=00000078 esi=00000001 edi=00000018 0009:trace:seh:raise_exception ebp=000000fa esp=0034f91c cs=0073 ds=007b es=007b fs=0033 gs=003b flags=00010212 0009:warn:bitmap:X11DRV_DIB_FaultHandler 0xe78: access to 0xab4380 beyond the end of the DIB ... --- snip ---
A warn is printed now to detect broken apps.
Regarding "no way to work around such broken apps" .. forget it ;-) The solution was already there (see calculation formula in detection/diagnosis comment)... all that needs to be done is to allow the DIB access even in "bad guy" case. I just overlooked it, maybe it was a bit late :-)
The DIB update works as expected even if bits past the valid physbitmap range are touched because the underlying bits buffer is technically page size rounded (like windows).
This bug can be closed because it's fixed in GIT and the apps starts now.
Regards