https://bugs.winehq.org/show_bug.cgi?id=37798 Bug ID: 37798 Summary: Warframe crashes on login when pasting the username or password from clipboard Product: Wine Version: 1.7.33 Hardware: x86 OS: Linux Status: NEW Severity: normal Priority: P2 Component: user32 Assignee: wine-bugs(a)winehq.org Reporter: focht(a)gmx.net Distribution: --- Hello folks, as the summary says. The launcher can be bypassed using following command from game directory (assuming full/up-to-date install): --- snip --- $ wine "Warframe.exe" -fullscreen:0 -dx10:0 -dx11:0 -threadedworker:1 -cluster:public -language:en -relaunch --- snip --- Relevant part of trace log: NOTE: 'msvcr110.*' should be excluded from relay trace to avoid lots of log spam and a potential app bug on '__libm_sse2_tanf' usage (changed stack layout/relay thunks triggers it). --- snip --- $ WINEDEBUG=+tid,+seh,+relay,+debugstr,+clipboard wine ./Warframe.exe -fullscreen:0 -dx10:0 -dx11:0 -threadedworker:1 -cluster:public -language:en -relaunch >>log.txt 2>&1 ... <copy/paste here> ... 0023:Call user32.OpenClipboard(00000000) ret=012c6074 0023:trace:clipboard:OpenClipboard ((nil))... 0023:trace:clipboard:OpenClipboard returning 1 0023:Ret user32.OpenClipboard() retval=00000001 ret=012c6074 0023:Call user32.GetClipboardData(0000000d) ret=012c6085 0023:trace:clipboard:GetClipboardData 000d 0023:Call winex11.drv.GetClipboardData(0000000d) ret=7e98d7b0 0023:trace:clipboard:X11DRV_GetClipboardData (000D) 0023:trace:clipboard:X11DRV_EmptyClipboard 0 entries remaining in cache. 0023:trace:clipboard:X11DRV_CLIPBOARD_QueryAvailableData Type 4,Format 32,nItems 10, Remain 0 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertSelectionProperties Atom#4 Property(298): --> Format CF_UNICODETEXT 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardData format=000d lpData=(nil) hData=(nil) flags=0x00000000 lpFormat=0x1483a8 override=0 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertSelectionProperties Atom#5 Property(502): --> Format CF_UNICODETEXT 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardData format=000d lpData=0x1c9872b0 hData=(nil) flags=0x00000000 lpFormat=0x1483c8 override=0 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertSelectionProperties Atom#7 Property(31): --> Format CF_TEXT 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardData format=0001 lpData=(nil) hData=(nil) flags=0x00000000 lpFormat=0x1481c8 override=0 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertSelectionProperties Atom#9 Property(505): --> Format CF_TEXT 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardData format=0001 lpData=0x2346a210 hData=(nil) flags=0x00000000 lpFormat=0x1481e8 override=0 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardFormat Registering format c055 L"TIMESTAMP" drvData 452 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertSelectionProperties Atom#0 Property(452): --> Format c055 L"TIMESTAMP" 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardData format=c055 lpData=(nil) hData=(nil) flags=0x00000000 lpFormat=0x237f9840 override=0 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardFormat Registering format c056 L"TARGETS" drvData 451 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertSelectionProperties Atom#1 Property(451): --> Format c056 L"TARGETS" 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardData format=c056 lpData=(nil) hData=(nil) flags=0x00000000 lpFormat=0x245f7ae0 override=0 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardFormat Registering format c057 L"MULTIPLE" drvData 448 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertSelectionProperties Atom#2 Property(448): --> Format c057 L"MULTIPLE" 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardData format=c057 lpData=(nil) hData=(nil) flags=0x00000000 lpFormat=0x245e9588 override=0 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardFormat Registering format c058 L"SAVE_TARGETS" drvData 450 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertSelectionProperties Atom#3 Property(450): --> Format c058 L"SAVE_TARGETS" 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardData format=c058 lpData=(nil) hData=(nil) flags=0x00000000 lpFormat=0x2379bb08 override=0 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardFormat Registering format c059 L"TEXT" drvData 503 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertSelectionProperties Atom#4 Property(503): --> Format c059 L"TEXT" 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardData format=c059 lpData=(nil) hData=(nil) flags=0x00000000 lpFormat=0x245dcbf0 override=0 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardFormat Registering format c05a L"text/plain;charset=utf-8" drvData 504 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertSelectionProperties Atom#5 Property(504): --> Format c05a L"text/plain;charset=utf-8" 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardData format=c05a lpData=(nil) hData=(nil) flags=0x00000000 lpFormat=0x245b93d0 override=0 0023:trace:clipboard:X11DRV_CLIPBOARD_SynthesizeData 0001 0023:trace:clipboard:X11DRV_CLIPBOARD_SynthesizeData 0007 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardData format=0007 lpData=(nil) hData=(nil) flags=0x00000002 lpFormat=(nil) override=1 0023:trace:clipboard:X11DRV_CLIPBOARD_SynthesizeData 000d 0023:trace:clipboard:X11DRV_CLIPBOARD_SynthesizeData 000e 0023:trace:clipboard:X11DRV_CLIPBOARD_SynthesizeData 0003 0023:trace:clipboard:X11DRV_CLIPBOARD_SynthesizeData 0008 0023:trace:clipboard:X11DRV_CLIPBOARD_SynthesizeData 0002 0023:trace:clipboard:X11DRV_EndClipboardUpdate 1 formats added to cached data 0023:trace:clipboard:X11DRV_CLIPBOARD_RenderFormat 0x000d hData((nil)) 0023:trace:clipboard:X11DRV_CLIPBOARD_ReadSelectionData 000d 0023:trace:clipboard:X11DRV_CLIPBOARD_ReadSelectionData Requesting conversion of CF_UNICODETEXT property (298) from selection type 000001bb 0023:trace:clipboard:X11DRV_CLIPBOARD_GetProperty Reading property 517 from X window 4400008 0023:trace:clipboard:X11DRV_CLIPBOARD_InsertClipboardData format=000d lpData=0x1c9872b0 hData=0x245acbb2 flags=0x00000000 lpFormat=0x1483a8 override=1 0023:trace:clipboard:X11DRV_CLIPBOARD_FreeData 000d 0023:trace:clipboard:X11DRV_CLIPBOARD_ReadSelectionData Returning 1 0023:trace:clipboard:X11DRV_GetClipboardData returning 0x245acbb2 (type 000d) 0023:Ret winex11.drv.GetClipboardData() retval=245acbb2 ret=7e98d7b0 0023:trace:clipboard:GetClipboardData returning 0x245acbb2 0023:Ret user32.GetClipboardData() retval=245acbb2 ret=012c6085 0023:Call KERNEL32.GlobalLock(245acbb2) ret=012c6096 0023:Ret KERNEL32.GlobalLock() retval=245aca40 ret=012c6096 0023:Call KERNEL32.GlobalUnlock(245acbb2) ret=012c610d 0023:Ret KERNEL32.GlobalUnlock() retval=00000000 ret=012c610d 0023:Call KERNEL32.GetLastError() ret=0040b47b 0023:Ret KERNEL32.GetLastError() retval=00000000 ret=0040b47b ... 0024:Call KERNEL32.OutputDebugStringA(0034c797 "Assert [ClipboardWindows.cpp:80]") ret=00408c20 --- snip --- Debugger session: --- snip --- Wine-dbg>bt Backtrace: =>0 0x7e98d6c2 GetClipboardData+0x15(wFormat=0xd) [/home/focht/projects/wine/wine.repo/src/dlls/user32/clipboard.c:521] in user32 (0x0033ee80) 1 0x012c6085 in warframe (+0xec6084) (0x2cb96190) 2 0x015da5f4 in warframe (+0x11da5f3) (0x0f8ccd60) 3 0x00000005 (0x014a0ea8) 4 0x00a8db10 in warframe (+0x68db0f) (0x00a4f6e0) 5 0xffffbbb8 (0xe8f18b56) Wine-dbg>si 0x012c6106: pushl %esi Wine-dbg>ni 0x012c6107: call *0x13a01e4 -> 0x7b846518 GlobalUnlock [/home/focht/projects/wine/wine.repo/src/dlls/kernel32/heap.c:485] in kernel32 Wine-dbg> 0x012c610d: testl %eax,%eax Wine-dbg> 0x012c610f: jnz 0x012c611c Wine-dbg> 0x012c6111: pushl $0x1565580 Wine-dbg> 0x012c6116: call *0x1571240 -> 0x0040b3e0 ; assert() Wine-dbg>info reg Register dump: CS:0023 SS:002b DS:002b ES:002b FS:0063 GS:006b EIP:012c6116 ESP:0033ee88 EBP:2cb96190 EFLAGS:00000246( - -- I Z- -P- ) EAX:00000000 EBX:00001d81 ECX:0033ee88 EDX:00110064 ESI:18144842 EDI:0033eee0 --- snip --- It seems the game engine code expects a non-zero return value from 'GlobalUnlock' after copying the clipboard data into a private buffer. This suggests that the clipboard code itself holds an own reference count to all data objects returned by 'GetClipboardData' - which makes sense since it manages the lifetime - not the app. I tested a small fix, locking the object before return (incrementing refcount). It allows copy/paste of username/password in login screen. $ sha1sum Warframe.msi 8397ed32bb8f88d2cb20f9397d3b1770ea826a68 Warframe.msi $ du -sh Warframe.msi 26M Warframe.msi $ wine --version wine-1.7.33-84-gfecbc88 Regards -- Do not reply to this email, post in Bugzilla using the above URL to reply. You are receiving this mail because: You are watching all bug changes.