[Bug 43570] Bravura Easy Computer Sync 1.5 crashes on startup

wine-bugs at winehq.org wine-bugs at winehq.org
Sat Aug 19 04:58:31 CDT 2017


https://bugs.winehq.org/show_bug.cgi?id=43570

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |focht at gmx.net
          Component|-unknown                    |shell32
           Severity|blocker                     |normal
            Version|2.0.2                       |1.6.2
                URL|                            |https://www.bravurasoftware
                   |                            |.com/easy-computer-sync/dow
                   |                            |nload.aspx
             Status|UNCONFIRMED                 |NEW
            Summary|Easy Computer Sync- wine    |Bravura Easy Computer Sync
                   |said i had to close the     |1.5 crashes on startup
                   |whole programe              |
           Keywords|                            |download
     Ever confirmed|0                           |1

--- Comment #2 from Anastasius Focht <focht at gmx.net> ---
Hello folks

confirming.

--- snip ---
$ pwd
/home/focht/.wine/drive_c/Program Files/Bravura/Easy Computer Sync

$ WINEDEBUG=+tid,+seh,+relay wine ./EasySync.exe >>log.txt 2>&1
...
002f:Call advapi32.RegOpenKeyExW(80000002,001bc000
L"SYSTEM\\CurrentControlSet\\Control\\Class\\{BC103702-DD72-406F-9B28-95C868337B59}",00000000,00020019,0033edd8)
ret=0047318a
002f:Ret  advapi32.RegOpenKeyExW() retval=00000002 ret=0047318a 
...
002f:Call KERNEL32.InterlockedIncrement(00c6c26c) ret=00403fe8
002f:Ret  KERNEL32.InterlockedIncrement() retval=00000002 ret=00403fe8
002f:trace:seh:raise_exception code=c0000005 flags=0 addr=0x40393d ip=0040393d
tid=002f
002f:trace:seh:raise_exception  info[0]=00000000
002f:trace:seh:raise_exception  info[1]=00000000
002f:trace:seh:raise_exception  eax=00c6c1f8 ebx=00000007 ecx=00000000
edx=00c6c26c esi=006f817c edi=7b431890
002f:trace:seh:raise_exception  ebp=0033ef18 esp=0033eeb4 cs=0023 ds=002b
es=002b fs=0063 gs=006b flags=00210246
002f:trace:seh:call_stack_handlers calling handler at 0x6bc638 code=c0000005
flags=0 
...
Unhandled exception: page fault on read access to 0x00000000 in 32-bit code
(0x0040393d).
...
Backtrace:
=>0 0x0040393d in easysync (+0x393d) (0x0033ef18)
  1 0x0052d9f0 in easysync (+0x12d9ef) (0x0033efd4)
  2 0x00528b67 in easysync (+0x128b66) (0x0033eff4)
  3 0x0052c14f in easysync (+0x12c14e) (0x0033f068)
  4 0x0052c1de in easysync (+0x12c1dd) (0x0033f088)
  5 0x7ea9bb46 WINPROC_wrapper+0x19() in user32 (0x0033f0b8)
  6 0x7ea9bc5f call_window_proc+0xa1(hwnd=0x100b4, msg=0x6, wp=0, lp=0,
result=0x33f238, arg=0x52c1a8)
[/home/focht/projects/wine/wine.repo/src/dlls/user32/winproc.c:245] in user32
(0x0033f0f8)
  7 0x7ea9d993 WINPROC_call_window+0x13b(hwnd=0x100b4, msg=0x6, wParam=0,
lParam=0, result=0x33f238, unicode=0x1, mapping=WMCHAR_MAP_DISPATCHMESSAGE)
[/home/focht/projects/wine/wine.repo/src/dlls/user32/winproc.c:901] in user32
(0x0033f148)
  8 0x7ea670e5 DispatchMessageW+0x187(msg=<couldn't compute location>)
[/home/focht/projects/wine/wine.repo/src/dlls/user32/message.c:4034] in user32
(0x0033f268)
  9 0x7bc7c6f6 relay_call+0x39() in ntdll (0x0033f298)
  10 0x7ea07e95 in user32 (+0x7e94) (0x0033f2e0)
  11 0x00577302 in easysync (+0x177301) (0x0033f2e0)
  12 0x00531d02 in easysync (+0x131d01) (0x0033f32c)
  13 0x00436101 in easysync (+0x36100) (0x0033fd9c)
  14 0x0068f63c in easysync (+0x28f63b) (0x0033fdb0)
  15 0x006724f1 in easysync (+0x2724f0) (0x0033fe40) 
...
0x0040393d: movl    0x0(%ecx),%eax
Modules:
Module    Address            Debug info    Name (106 modules)
PE      400000-  b4b000    Export          easysync
ELF    4b4ac000-4b4ca000    Deferred        libgcc_s.so.1
ELF    7b400000-7b7f0000    Dwarf           kernel32<elf>
  \-PE    7b420000-7b7f0000    \               kernel32
ELF    7bc00000-7bd09000    Dwarf           ntdll<elf>
  \-PE    7bc30000-7bd09000    \               ntdll
ELF    7c000000-7c004000    Dwarf           <wine-loader> 
...
Threads:
process  tid      prio (all id:s are in hex)
...
0000002e (D) C:\Program Files\Bravura\Easy Computer Sync\EasySync.exe
    0000002f    0 <== 
--- snip ---

The crash is trigged by incomplete app internal struct members initialization.
Tracing that back to a completely unrelated piece of code was kinda challenging
as these structures were hierarchical (linked) and dynamically allocated. Very
few "stable" member references, referring to fixed virtual addresses (many
duplicate structures to rule out).

Anyway, the real problem is the app failing to extract a number of icon
resources from 'shell32.dll'. Each failure causes a C++ exception which gets
counted. If the count exceeds a threshold, an internal thread is terminated
which was partially responsible for further struct member initialization (flag
field) which later causes another piece of initialization code to be skipped,
ultimately leading to the crash.

--- snip ---
...
002f:Call
KERNEL32.CreateThread(00000000,00000000,0048c0f0,00c6c280,00000000,00000000)
ret=0048bf13
002f:Ret  KERNEL32.CreateThread() retval=00000090 ret=0048bf13
...
0030:Starting thread proc 0x48c0f0 (arg=0xc6c280)
...
0030:Call shell32.ExtractIconExW(001890f0
L"C:\\windows\\system32\\shell32.dll",fffffffc,00000000,00ca01c8,00000001)
ret=00481223
0030:Call user32.PrivateExtractIconExW(001890f0
L"C:\\windows\\system32\\shell32.dll",fffffffc,00000000,00ca01c8,00000001)
ret=7e57a20c
0030:Call winex11.drv.CreateDesktopWindow(00010020) ret=7ea81d84
0030:Ret  winex11.drv.CreateDesktopWindow() retval=00000001 ret=7ea81d84
...
0030:Ret  user32.PrivateExtractIconExW() retval=00000001 ret=7e57a20c
0030:Ret  shell32.ExtractIconExW() retval=00000001 ret=00481223
...
0030:Call shell32.ExtractIconExW(001890f0
L"C:\\windows\\system32\\shell32.dll",fffffffc,00ca01cc,00000000,00000001)
ret=00481248
0030:Call user32.PrivateExtractIconExW(001890f0
L"C:\\windows\\system32\\shell32.dll",fffffffc,00ca01cc,00000000,00000001)
ret=7e57a20c
...
0030:Ret  user32.PrivateExtractIconExW() retval=00000001 ret=7e57a20c
0030:Ret  shell32.ExtractIconExW() retval=00000001 ret=00481248 
...
0030:Call shell32.ExtractIconExW(0018a360
L"C:\\windows\\system32\\shell32.dll",fffffffe,00000000,00ca14f8,00000001)
ret=00481223
0030:Call user32.PrivateExtractIconExW(0018a360
L"C:\\windows\\system32\\shell32.dll",fffffffe,00000000,00ca14f8,00000001)
ret=7e57a20c
0030:Ret  user32.PrivateExtractIconExW() retval=00000000 ret=7e57a20c
0030:Ret  shell32.ExtractIconExW() retval=00000000 ret=00481223 
...
0030:Call KERNEL32.RaiseException(e06d7363,00000001,00000003,00e6e71c)
ret=0067618e
0030:trace:seh:raise_exception code=e06d7363 flags=1 addr=0x7b446223
ip=7b446223 tid=0030
0030:trace:seh:raise_exception  info[0]=19930520
0030:trace:seh:raise_exception  info[1]=00e6e770
0030:trace:seh:raise_exception  info[2]=00785520
0030:trace:seh:raise_exception  eax=7b43499d ebx=0000001f ecx=0000000c
edx=00e6e664 esi=00e6e708 edi=00e6e6d0
0030:trace:seh:raise_exception  ebp=00e6e6a8 esp=00e6e644 cs=0023 ds=e6002b
es=fbad002b fs=0063 gs=e6006b flags=00200216
0030:trace:seh:call_stack_handlers calling handler at 0x6b842a code=e06d7363
flags=1 
...
0030:trace:seh:__regs_RtlUnwind handler at 0x6b842a returned 1 
...
0030:Call shell32.ExtractIconExW(0018a458
L"C:\\windows\\system32\\shell32.dll",fffffffd,00000000,00ca14f8,00000001)
ret=00481223
0030:Call user32.PrivateExtractIconExW(0018a458
L"C:\\windows\\system32\\shell32.dll",fffffffd,00000000,00ca14f8,00000001)
ret=7e57a20c
0030:Ret  user32.PrivateExtractIconExW() retval=00000000 ret=7e57a20c
0030:Ret  shell32.ExtractIconExW() retval=00000000 ret=00481223 
...
0030:Call KERNEL32.RaiseException(e06d7363,00000001,00000003,00e6e71c)
ret=0067618e
0030:trace:seh:raise_exception code=e06d7363 flags=1 addr=0x7b446223
ip=7b446223 tid=0030
0030:trace:seh:raise_exception  info[0]=19930520
0030:trace:seh:raise_exception  info[1]=00e6e770
0030:trace:seh:raise_exception  info[2]=00785520
0030:trace:seh:raise_exception  eax=7b43499d ebx=0000001f ecx=0000000c
edx=00e6e664 esi=00e6e708 edi=00e6e6d0
0030:trace:seh:raise_exception  ebp=00e6e6a8 esp=00e6e644 cs=0023 ds=e6002b
es=fbad002b fs=0063 gs=e6006b flags=00200216
0030:trace:seh:call_stack_handlers calling handler at 0x6b842a code=e06d7363
flags=1 
...
0030:trace:seh:__regs_RtlUnwind handler at 0x6b842a returned 1 
...
0030:Call shell32.ExtractIconExW(0018a458
L"C:\\windows\\system32\\shell32.dll",ffffff15,00000000,00ca14f8,00000001)
ret=00481223
0030:Call user32.PrivateExtractIconExW(0018a458
L"C:\\windows\\system32\\shell32.dll",ffffff15,00000000,00ca14f8,00000001)
ret=7e57a20c
...
0030:Ret  user32.PrivateExtractIconExW() retval=00000001 ret=7e57a20c
0030:Ret  shell32.ExtractIconExW() retval=00000001 ret=00481223
...
0030:Call shell32.ExtractIconExW(0018a458
L"C:\\windows\\system32\\shell32.dll",ffffff15,00ca14fc,00000000,00000001)
ret=00481248
0030:Call user32.PrivateExtractIconExW(0018a458
L"C:\\windows\\system32\\shell32.dll",ffffff15,00ca14fc,00000000,00000001)
ret=7e57a20c
...
0030:Ret  user32.PrivateExtractIconExW() retval=00000001 ret=7e57a20c
0030:Ret  shell32.ExtractIconExW() retval=00000001 ret=00481248 
...
0030:Call PE DLL (proc=0x7e355fe3,module=0x7e270000
L"ole32.dll",reason=THREAD_DETACH,res=(nil))
0030:Ret  PE DLL (proc=0x7e355fe3,module=0x7e270000
L"ole32.dll",reason=THREAD_DETACH,res=(nil)) retval=1 
--- snip ---

You need to add shell32 resources for:

* IDI_SHELL_RICH_TEXT (2)
* IDI_SHELL_EXE (3)

The app will no longer crash and display some "Waiting for cable connection"
dialog.

Regarding USB cable, that's a different issue.

'{BC103702-DD72-406F-9B28-95C868337B59}' -> Easy Transfer Cable driver

http://kb.laplink.com/index.php/article/printer/1054

Additional info about the USB cable:

https://www.bravurasoftware.com/easy-computer-sync/easy-transfer-cable.aspx

--- quote ---
The Easy Transfer Cable is a specialized USB device for transferring data
between two computers. It looks like a typical USB cable, except with a small
box in the middle. This box holds the needed electronics to allow both
computers to communicate with each other. The Easy Transfer Cable is USB 2.0
compliant, and allows transfer speeds of up to 480Mbps.

Easy Computer Sync is designed for and requires an Easy Transfer Cable. 
--- quote ---

*
https://askubuntu.com/questions/905926/is-data-transfer-between-2-ubuntu-machines-possible-via-usb-cable
*
https://superuser.com/questions/795053/how-do-i-connect-two-computers-using-usb-3-0/1165890#1165890
*
https://stackoverflow.com/questions/44086265/exposing-block-devices-from-a-linux-machine-to-a-windows-machine-connected-via-a

--- quote ---
Using an "Easy Transfer Cable" (specifically, one with a Prolific PL27a1), the
Linux distro sees that cable as an ethernet connection (as desired). However,
Windows does not.

Is it possible to use an "Easy Transfer Cable" to act as an ethernet connection
on Windows? That is, creating a virtual ethernet connection over a USB transfer
cable.
--- quote ---

So it seems as long as the USB device is registered as Ethernet NIC by the
Linux kernel (driver) and as long as you connect two Linux boxes it might work
- but without this software. The software wants to interact with the hardware
on USB device (lib) level which isn't going to work as of now.

Anyway, why not using network cables to sync data?

$ sha1sum EasySyncSetup.exe 
470b36058e11615e736b30cecabc4a89053767ed  EasySyncSetup.exe

$ du -sh EasySyncSetup.exe 
9.9M    EasySyncSetup.exe

$ wine --version
wine-2.14-97-gd53b711f27

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