[Bug 37798] New: Warframe crashes on login when pasting the username or password from clipboard

wine-bugs at winehq.org wine-bugs at winehq.org
Sun Dec 28 16:58:26 CST 2014


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 at winehq.org
          Reporter: focht at 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.



More information about the wine-bugs mailing list