http://bugs.winehq.org/show_bug.cgi?id=58333
Bug ID: 58333 Summary: Lotus Freelance Graphics 2.1 reports a C runtime error and exits Product: Wine Version: 10.9 Hardware: x86-64 URL: https://archive.org/download/lotussmartsuiterelease3.1 forwindows/Lotus%20SmartSuite%20Release%203.1%20for%20 Windows.zip OS: Linux Status: NEW Keywords: download, win16 Severity: normal Priority: P2 Component: -unknown Assignee: wine-bugs@winehq.org Reporter: imwellcushtymelike@gmail.com Distribution: Ubuntu
Created attachment 78706 --> http://bugs.winehq.org/attachment.cgi?id=78706 Screenshot
Lotus Freelance Graphics 2.1 reports a C runtime error and either exits or hangs.
Installed with an earlier version of Wine to work around Bug 58329. Tested with many version of Wine up to latest git (wine-10.9-62-g68bd146ae55).
$ wine 'c:\LOTSUITE\FLW\FLW.EXE' 0134:err:local:LOCAL_GetBlock not enough space in local heap 0b07 for 124 bytes
After many hours messing around I discovered that this was due to me adding a single environment variable, such as WINEDEBUG=+server for example. Apparently this was just enough to "break the donkey's back".
However, my environment variables aren't particularly large.
$ true | xargs --show-limits Your environment variables take up 2260 bytes POSIX upper limit on argument length (this system): 2092844 POSIX smallest allowable upper limit on argument length (all systems): 4096 Maximum length of command we could actually use: 2090584 Size of command buffer we are actually using: 131072
An +all trace (because I didn't know where to start) shows that Wine's environment variables only come to around 3K, which also doesn't seem a lot.
I wanted to trace get_startup_info() but setting WINEDEBUG=+ntdll or +server simply triggers the bug.
To prove... nothing I added 100 large variables and winevdm sat churning away for five minutes before I got bored and stopped it. 0130:err:sync:RtlpWaitForCriticalSection section 78F049E0 "dlls/krnl386.exe16/syslevel.c: Win16Mutex" wait timed out in thread 0130, blocked by 0134, retrying (60 sec)
0134:trace:local:LOCAL_PrintHeap Local Heap ds=0b07 first=f2c0 last=fff4 items=5 0134:trace:local:LOCAL_PrintHeap f2c0: prev=f2c0 next=f2cc type=1 0134:trace:local:LOCAL_PrintHeap size=12 free_prev=f2c0 free_next=ff80 0134:trace:local:LOCAL_PrintHeap f2cc: prev=f2c0 next=f2fc type=1 0134:trace:local:LOCAL_PrintHeap f2fc: prev=f2cc next=ff80 type=1 0134:trace:local:LOCAL_PrintHeap ff80: prev=f2fc next=fff4 type=0 0134:trace:local:LOCAL_PrintHeap size=116 free_prev=f2c0 free_next=fff4 0134:trace:local:LOCAL_PrintHeap fff4: prev=ff80 next=fff4 type=0 0134:trace:local:LOCAL_PrintHeap size=12 free_prev=ff80 free_next=fff4 0134:err:local:LOCAL_GetBlock not enough space in local heap 0b07 for 124 bytes
“Does this mirror the behaviour seen on Windows?” I'll have to come back to that.
http://bugs.winehq.org/show_bug.cgi?id=58333
--- Comment #1 from Ken Sharp imwellcushtymelike@gmail.com --- Turns out it's not new: Bug 23148
http://bugs.winehq.org/show_bug.cgi?id=58333
--- Comment #2 from Ken Sharp imwellcushtymelike@gmail.com --- Probably Bug 1490 which is a wontfix, but I'll confirm asap.
http://bugs.winehq.org/show_bug.cgi?id=58333
--- Comment #3 from Ken Sharp imwellcushtymelike@gmail.com --- I tried spamming my environment with a tonne of large variables and Windows 3.1 wouldn't even start. There's probably a better way to do that then filling the MSDOS environment, but I don't know how.
Windows NT 4.0 (SP1 and SP6a) allowed Freelance to start without issue, despite my environment being over 1 MB. So it's doing *something* to allow Freelance to start (under NTVDM), which might simply be using a clean environment. I'm not aware of any useful tools to let me know but I could dump the memory if need be. It takes so long to fill the memory that I'd have to come back to that if it's useful.
But I was, of course, running these tests under a VM, and with a 32-bit OS. As MS decided to simply drop 16-bit support for 64-bit Windows there's no real like-for-like comparison.