[Bug 8185] can't login in Skype 3.1 on wine/kubuntu 7

Wine Bugs wine-bugs at winehq.org
Sun May 27 12:54:13 CDT 2007


http://bugs.winehq.org/show_bug.cgi?id=8185





------- Additional Comments From saulius.krasuckas at elst.vtu.lt  2007-27-05 12:54 -------
Here is my preliminar guess on the bug scenario:

trace:nls:MultiByteToWideChar cp 0 "Edit" -> L"Edit", ret = 4
trace:class:CLASS_RegisterClass atom=0xc00d hinst=0x602c0000 style=0x88 clExt...
trace:win:alloc_winproc allocated 0xffff0005 for 0x60307a10/0x60307a40 (6/819...

  Here Wine allocates A and W window procedures for Edit controls: 
  0x60307a10 and 0x60307a40.

trace:win:WIN_CreateWindowEx (null) L"Edit" ex=00000000 style=50000380 3,3 
    218x18 parent=0x1006c menu=0x3e9 inst=0x400000 params=(nil)
     :  
trace:win:WIN_SetWindowLong 0x10070 -12 3e9 W
0009:Call winex11.drv.CreateWindow(00010070,0033e32c,00000001) ret=60355623
     :
trace:edit:EDIT_WM_NCCreate Creating Unicode edit control, style = 50000380

  Edit control is created to enter username.  Its parent is some 
  "TTntComboBox." control.

0009:Call user32.SendMessageA(0001006c,00000141,00000100,00000000) ret=00460a39
    :
trace:message:SPY_EnterMessage         (0x10070) L"{Edit}"        message [00c5]
    EM_LIMITTEXT sent from self wp=00000100 lp=00000000
trace:msg:call_window_proc W
trace:win:WINPROC_GetProc DUMP: ptr        = 0x603bd1dc
trace:win:WINPROC_GetProc DUMP: ptr->procA = 0x60307a10
trace:win:WINPROC_GetProc DUMP: ptr->procW = 0x60307a40
trace:win:WINPROC_GetProc DUMP: proc       = 0xffff0005
trace:win:WINPROC_GetProc returning ptr->procW
trace:win:CallWindowProcW Calling passed func.
0009:Call window proc 0x60307a40 (hwnd=0x10070,msg=EM_LIMITTEXT,wp=00000100,
    lp=00000000)
trace:edit:EditWndProc_common hwnd=0x10070 msg=c5 (EM_LIMITTEXT) wparam=100 
    lparam=0 W

  Edit's parent processes CB_LIMITTEXT, and EditWndProc_common() is passed 
  with unicode=1.

0009:Ret  user32.SendMessageA() retval=00000000 ret=00460a39
0009:Call user32.GetWindow(0001006c,00000005) ret=00460f10
0009:Ret  user32.GetWindow() retval=00010070 ret=00460f10
0009:Call user32.GetWindowLongA(00010070,fffffffc) ret=00460f64
trace:win:WINPROC_GetProc DUMP: ptr        = 0x603bd1dc
trace:win:WINPROC_GetProc DUMP: ptr->procA = 0x60307a10
trace:win:WINPROC_GetProc DUMP: ptr->procW = 0x60307a40
trace:win:WINPROC_GetProc DUMP: proc       = 0xffff0005
trace:win:WINPROC_GetProc returning ptr->procA
0009:Ret  user32.GetWindowLongA() retval=60307a10 ret=00460f64
0009:Call user32.SetWindowLongA(00010070,fffffffc,00340d31) ret=00460f7f
trace:win:WIN_SetWindowLong 0x10070 -4 340d31 A
trace:win:WINPROC_GetProc DUMP: ptr        = 0x603bd1dc
trace:win:WINPROC_GetProc DUMP: ptr->procA = 0x60307a10
trace:win:WINPROC_GetProc DUMP: ptr->procW = 0x60307a40
trace:win:WINPROC_GetProc DUMP: proc       = 0xffff0005
trace:win:WINPROC_GetProc returning ptr->procA
trace:win:alloc_winproc allocated 0xffff0051 for 0x340d31/(nil) (82/8192 used)
0009:Ret  user32.SetWindowLongA() retval=60307a10 ret=00460f7f
0009:Call user32.SendMessageA(00010070,000000d3,00000003,00000000) ret=00460fa7

  After CB_LIMITTEXT is processed, handle of Edit control is passed to 2 
  subsequent calls: GetWindowLongA() and SetWindowLongA().  Latter adds new 
  window proc (00340d31) to the control.

  Then EM_SETMARGINS is sent to Edit:

trace:message:SPY_EnterMessage     (0x10070) L"{Edit}"        message [00d3] 
    EM_SETMARGINS sent from self wp=00000003 lp=00000000
trace:msg:call_window_proc A
trace:win:WINPROC_GetProc DUMP: ptr        = 0x603bd56c
trace:win:WINPROC_GetProc DUMP: ptr->procA = 0x340d31
trace:win:WINPROC_GetProc DUMP: ptr->procW = (nil)
trace:win:WINPROC_GetProc DUMP: proc       = 0xffff0051
trace:win:WINPROC_GetProc returning ptr->procA
0009:Call window proc 0x340d31 (hwnd=0x10070,msg=EM_SETMARGINS,wp=00000003,  ...
0009:Call user32.IsWindowUnicode(00010070) ret=004bd98e
0009:Ret  user32.IsWindowUnicode() retval=00000000 ret=004bd98e
0009:Call user32.CallWindowProcA(60307a10,00010070,000000d3,00000003,00000000...
0009:Call window proc 0x60307a10 (hwnd=0x10070,msg=EM_SETMARGINS,wp=00000003,...
trace:edit:EditWndProc_common hwnd=0x10070 msg=d3 (EM_SETMARGINS) wparam=3 
    lparam=0 A

  Here new window proc is executed and EditWndProc_common() is called already 
  with unicode=0.

0009:Ret  user32.SendMessageA() retval=00000000 ret=00460fa7
0009:Call user32.GetWindowLongA(00010070,fffffffc) ret=004bd694
trace:win:WINPROC_GetProc DUMP: ptr        = 0x603bd56c
trace:win:WINPROC_GetProc DUMP: ptr->procA = 0x340d31
trace:win:WINPROC_GetProc DUMP: ptr->procW = (nil)
trace:win:WINPROC_GetProc DUMP: proc       = 0xffff0051
trace:win:WINPROC_GetProc returning ptr->procA
0009:Ret  user32.GetWindowLongA() retval=00340d31 ret=004bd694
0009:Call user32.SetWindowLongW(00010070,fffffffc,00340d31) ret=004bd6a6
trace:win:WIN_SetWindowLong 0x10070 -4 340d31 W
trace:win:WINPROC_GetProc DUMP: ptr        = 0x603bd56c
trace:win:WINPROC_GetProc DUMP: ptr->procA = 0x340d31
trace:win:WINPROC_GetProc DUMP: ptr->procW = (nil)
trace:win:WINPROC_GetProc DUMP: proc       = 0xffff0051
trace:win:WINPROC_GetProc returning proc
trace:win:alloc_winproc allocated 0xffff0052 for (nil)/0x340d31 (83/8192 used)
0009:Ret  user32.SetWindowLongW() retval=ffff0051 ret=004bd6a6

  Then two more calls are executed: GetWindowLongA() and SetWindowLongW().  Now
  our new window proc (0x340d31) is passed already to W-function, not A-one as 
  it was earlierly.

0009:Call user32.GetWindowTextLengthW(0001006c) ret=004c6d73

  After some work GetWindowTextLengthW() is called on Edit's parent.  And 
  it brings following:

trace:combo:ComboWndProc_common [0x1006c]: msg WM_COMMAND wp 030003e9 lp 
    00010070 W
     :
trace:combo:CBUpdateLBox         edit text length 8
trace:class:CLASS_GetClassLong 0x10070 -32
trace:class:GetClassNameW 0x10070 0x33e8b0 60
trace:class:CLASS_GetClassLong 0x10070 -32
trace:message:SPY_EnterMessage         (0x10070) L"{Edit}"        message [000d]
    WM_GETTEXT sent from self wp=00000009 lp=021fe5e8
trace:msg:call_window_proc W
trace:win:WINPROC_GetProc DUMP: ptr        = 0x603bd578
trace:win:WINPROC_GetProc DUMP: ptr->procA = (nil)
trace:win:WINPROC_GetProc DUMP: ptr->procW = 0x340d31
trace:win:WINPROC_GetProc DUMP: proc       = 0xffff0052
trace:win:WINPROC_GetProc returning ptr->procW
trace:win:CallWindowProcW Calling passed func.
0009:Call window proc 0x340d31 (hwnd=0x10070,msg=WM_GETTEXT,wp=00000009,
    lp=021fe5e8)
0009:Call user32.IsWindowUnicode(00010070) ret=004bd98e
0009:Ret  user32.IsWindowUnicode() retval=00000001 ret=004bd98e
0009:Call user32.IsWindowUnicode(00010070) ret=004bd7cf
0009:Ret  user32.IsWindowUnicode() retval=00000001 ret=004bd7cf
0009:Call user32.CallWindowProcW(60307a10,00010070,0000000d,00000009,021fe5e8) 
    ret=004bd803
trace:win:CallWindowProcW Calling passed func.
0009:Call window proc 0x60307a10 (hwnd=0x10070,msg=WM_GETTEXT,wp=00000009,
    lp=021fe5e8)
trace:edit:EditWndProc_common hwnd=0x10070 msg=d (WM_GETTEXT) wparam=9 
    lparam=21fe5e8 A
trace:edit:EDIT_WM_GetText count=9, es->text="s", dst=0x21fe5e8 A
trace:nls:WideCharToMultiByte cp 0 L"saulius2\0000" -> "saulius2\x00", ret = 9
trace:edit:EditWndProc_common hwnd=0x10070 msg=d (WM_GETTEXT) -- 0x00000008
0009:Ret  window proc 0x60307a10 (hwnd=0x10070,msg=WM_GETTEXT,wp=00000009,
    lp=021fe5e8) retval=00000008

  Please note:  values of ptr->procA and ptr->procW already got swapped (after 
  previous SetWindowLongW() call), but EditWndProc_common() is still called with 
  unicode=0.  Could that be due to new Skype wndproc which got confused by a 
  value ffff0051 returned by SetWindowLongW() ?

  And finally:

trace:win:CallWindowProcW WM_GETTEXT, lParam=
trace:win:CallWindowProcW A:  "saulius2"
trace:win:CallWindowProcW W:  L"\6173\6c75\7569\3273"
0009:Ret  user32.CallWindowProcW() retval=00000008 ret=004bd803
0009:Ret  window proc 0x340d31 (hwnd=0x10070,msg=WM_GETTEXT,wp=00000009,
    lp=021fe5e8) retval=00000008
trace:win:CallWindowProcW WM_GETTEXT, lParam=
trace:win:CallWindowProcW A:  "saulius2"
trace:win:CallWindowProcW W:  L"\6173\6c75\7569\3273"

  ...we get W-garbage in CBUpdateLBox() via GetWindowTextW().  I don't see this 
  relay in my log.  It's strange for me.  Maybe that's due to CBUpdateLBox() 
  being static function?

Any ideas on going further?

-- 
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the wine-bugs mailing list