[Bug 39269] FX Interactive Webplayer fails to install, reporting 'File not found' (SHFileOperation FO_MOVE operation with wildcard source fails)
wine-bugs at winehq.org
wine-bugs at winehq.org
Sun Sep 13 10:21:36 CDT 2015
https://bugs.winehq.org/show_bug.cgi?id=39269
Anastasius Focht <focht at gmx.net> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |download, Installer
Status|UNCONFIRMED |NEW
URL| |http://downloadnavy.fxinter
| |active.com/wu_updates_priva
| |te/FXWebPlayer.exe
CC| |focht at gmx.net
Component|-unknown |shell32
Summary|missing stub for |FX Interactive Webplayer
|downloading/installing .m2i |fails to install, reporting
|file |'File not found'
| |(SHFileOperation FO_MOVE
| |operation with wildcard
| |source fails)
Ever confirmed|0 |1
--- Comment #1 from Anastasius Focht <focht at gmx.net> ---
Hello folks,
confirming.
The download is completely fine.
Although "FIXME" stub messages could indicate some missing functionality in
many cases it's not the culprit and they tend to be rather harmless.
--- snip ---
$ WINEDEBUG=+tid,+seh,+relay,+wininet wine ./FXWebPlayer.exe >>log.txt 2>&1
...
002d:Call KERNEL32.OutputDebugStringA(007e4c90 "[WuUpdater] 00% Descargando
C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer.w2i:
") ret=0046a011
...
002d:Call wininet.HttpOpenRequestA(00000002,00491dd4 "GET",005e9240
"wu_updates_public/fxwebplayer.w2i",00491dd8
"HTTP/1.0",00000000,004a48ec,04000000,00000000) ret=004729a3
...
002d:trace:wininet:HTTP_HttpSendRequestW full request -> "GET
/wu_updates_public/fxwebplayer.w2i HTTP/1.0\r\nAccept: */*\r\nHost:
downloadnavy.fxinteractive.com\r\nUser-Agent: Mozilla/4.0 (compatible;
)\r\n\r\n"
...
002d:trace:wininet:HTTP_GetResponseHeaders version [L"HTTP/1.1"] status code
[L"200"] status text [L"OK"]
...
002d:trace:wininet:HTTP_GetResponseHeaders got line "Content-Length: 4189201",
now interpreting
...
002d:Call KERNEL32.OutputDebugStringA(007e4c98 "Down...") ret=0046a068
...
002d:Call KERNEL32.CreateFileA(005e8f68
"C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer.w2i",40000000,00000007,00000000,00000002,00000000,00000000)
ret=0046a1fe
002d:Ret KERNEL32.CreateFileA() retval=000000b4 ret=0046a1fe
...
002d:Call wininet.InternetReadFile(00000003,005ea4e8,0000ffff,007e5c84)
ret=00471f99
...
002d:trace:wininet:netconn_read read 60496 bytes
002d:trace:wininet:HTTPREQ_Read retrieved 60496 bytes (4189201)
002d:trace:wininet:WININET_Release object 0x157808 refcount = 1
002d:trace:wininet:InternetReadFile -- TRUE (0) (bytes read: 60496)
002d:Ret wininet.InternetReadFile() retval=00000001 ret=00471f99
...
002d:Call KERNEL32.OutputDebugStringA(007e4c88 "4189201 bytes a -0.00 KB/s\n")
ret=0046a011
...
002d:Call KERNEL32.CreateFileA(005e8f68
"C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer.w2i",80000000,00000003,00000000,00000003,08000000,00000000)
ret=0046b983
002d:Ret KERNEL32.CreateFileA() retval=000000ac ret=0046b983
002d:Call KERNEL32.GetFileSize(000000ac,007e6550) ret=0046b995
002d:Ret KERNEL32.GetFileSize() retval=003fec11 ret=0046b995
002d:Call KERNEL32.SetFilePointer(000000ac,00000000,00000000,00000002)
ret=0046abd5
002d:Ret KERNEL32.SetFilePointer() retval=003fec11 ret=0046abd5
002d:Call KERNEL32.SetFilePointer(000000ac,fffffffc,00000000,00000002)
ret=0046abe6
002d:Ret KERNEL32.SetFilePointer() retval=003fec0d ret=0046abe6
002d:Call KERNEL32.ReadFile(000000ac,007e6504,00000004,007e64e8,00000000)
ret=0046abfa
002d:Ret KERNEL32.ReadFile() retval=00000001 ret=0046abfa
002d:Call advapi32.CryptAcquireContextA(007e64d4,00000000,00491ecc "Microsoft
Base Cryptographic Provider v1.0",00000001,00000000) ret=00473ef6
...
002d:Ret advapi32.CryptAcquireContextA() retval=00000000 ret=00473ef6
002d:Call
advapi32.CryptCreateHash(00000000,00008004,00000000,00000000,007e64dc)
ret=00473f45
002d:Ret advapi32.CryptCreateHash() retval=00000000 ret=00473f45
...
002d:Call
advapi32.CryptVerifySignatureA(00000000,005ea4e8,00000080,00000000,00000000,00000000)
ret=00473f8f
002d:Ret advapi32.CryptVerifySignatureA() retval=00000000 ret=00473f8f
002d:Call advapi32.CryptDestroyHash(00000000) ret=00473fa1
002d:Ret advapi32.CryptDestroyHash() retval=00000000 ret=00473fa1
002d:Call KERNEL32.GetLastError() ret=00456aee
002d:Ret KERNEL32.GetLastError() retval=00000006 ret=00456aee
...
002d:Call KERNEL32.OutputDebugStringA(007e54b0 "[WuUpdater] Firma no verificada
para
'C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer.w2i'.\n")
ret=0046a011
...
002d:Call KERNEL32.CreateFileA(005faa40
"C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer\\data/7zr.exe",c0000000,00000007,00000000,00000002,08000000,00000000)
ret=0046a1fe
002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe
...
002d:Call KERNEL32.CreateFileA(005fa640
"C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer\\data/dbghelp.dll",c0000000,00000007,00000000,00000002,08000000,00000000)
ret=0046a1fe
002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe
...
002d:Call KERNEL32.CreateFileA(005fa640
"C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer\\data/FXCaps.dll",c0000000,00000007,00000000,00000002,08000000,00000000)
ret=0046a1fe
002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe
...
002d:Call KERNEL32.CreateFileA(005fa640
"C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer\\data/Fxp.dll",c0000000,00000007,00000000,00000002,08000000,00000000)
ret=0046a1fe
002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe
...
002d:Call KERNEL32.CreateFileA(005f0be8
"C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer\\data/fxplanet.ocx",c0000000,00000007,00000000,00000002,08000000,00000000)
ret=0046a1fe
002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe
...
002d:Call KERNEL32.CreateFileA(005f0b80
"C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer\\data/FXWebPlayer.exe",c0000000,00000007,00000000,00000002,08000000,00000000)
ret=0046a1fe
002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe
...
002d:Call KERNEL32.CreateFileA(005f0b80
"C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer\\data/MFC71.dll",c0000000,00000007,00000000,00000002,08000000,00000000)
ret=0046a1fe
002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe
...
002d:Call KERNEL32.CreateFileA(005f0b80
"C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer\\data/mfc80.dll",c0000000,00000007,00000000,00000002,08000000,00000000)
ret=0046a1fe
002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe
...
002d:Call KERNEL32.CreateFileA(005f0be8
"C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer\\wu2_install.IT.cfg",c0000000,00000007,00000000,00000002,08000000,00000000)
ret=0046a1fe
002d:Ret KERNEL32.CreateFileA() retval=000000e0 ret=0046a1fe
...
002d:Call KERNEL32.CreateFileA(005e8f68
"C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer.w2i",80000000,00000003,00000000,00000003,00000000,00000000)
ret=0040247a
002d:Ret KERNEL32.CreateFileA() retval=000000ac ret=0040247a
002d:Call KERNEL32.CloseHandle(000000ac) ret=00402489
002d:Ret KERNEL32.CloseHandle() retval=00000001 ret=00402489
002d:Call KERNEL32.DeleteFileA(005e8f68
"C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer.w2i")
ret=0046c61a
002d:Ret KERNEL32.DeleteFileA() retval=00000001 ret=0046c61a
...
002d:Call KERNEL32.lstrlenA(007e5c6c "Descarga de W2I completada con \xe9xito")
ret=00468559
...
002d:Call KERNEL32.lstrlenA(007e533c "ProcessInstallW2I
(C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer ->
C:\\users\\Public\\Application Data\\FXWebPlayer, FXWebPlayer)") ret=00468559
...
002d:Call KERNEL32.lstrlenA(005f0209 "DEST") ret=00401811
...
002d:Call KERNEL32.lstrlenA(005faac8 "C:\\users\\Public\\Application
Data\\FXWebPlayer") ret=00403c59
...
002d:Call KERNEL32.lstrlenA(007e5028 "W2I:Rename C:\\users\\Public\\Application
Data\\FXWebPlayer\\npfxplanet.dll -> C:\\users\\Public\\Application
Data\\FXWebPlayer\\_npfxplanet.dll") ret=00468559
...
002d:Call shell32.SHFileOperationA(007e587c) ret=004117b9
...
002d:Ret shell32.SHFileOperationA() retval=00000402 ret=004117b9
...
002d:Call KERNEL32.lstrlenA(007e5030 "ERROR ProcessInstallW2I (RENAME)")
ret=00468559
...
002d:Call KERNEL32.lstrlenA(007e5028 "W2I:Move
C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer\\Data\\*.*
-> C:\\users\\Public\\Application Data\\FXWebPlayer") ret=00468559
...
002d:Call KERNEL32.CreateDirectoryA(005ea418 "C:\\users\\Public\\Application
Data\\FXWebPlayer",00000000) ret=00411398
002d:Ret KERNEL32.CreateDirectoryA() retval=00000001 ret=00411398
002d:Call shell32.SHFileOperationA(007e587c) ret=0041140d
002d:Call KERNEL32.MultiByteToWideChar(00000000,00000000,007e5914
"C:\\users\\focht\\Temp\\{02B22974-0252-4c1a-AC08-0346941DEA7A}\\fxwebplayer\\Data\\*.*",00000051,00000000,00000000)
ret=7e22ac06
...
002d:Ret shell32.SHFileOperationA() retval=000004c7 ret=0041140d
002d:Call KERNEL32.GetLastError() ret=00456aee
002d:Ret KERNEL32.GetLastError() retval=00000012 ret=00456aee
...
002d:Call KERNEL32.lstrlenA(007e5030 "ERROR ProcessInstallW2I (MOVE)")
ret=00468559
...
002d:Call shell32.ShellExecuteExA(007e6488) ret=0040db54
...
002d:Call KERNEL32.CreateProcessW(00000000,007e5070
L"\"C:\\users\\Public\\Application Data\\FXWebPlayer\\FXWebPlayer.exe\" /url
connect",00000000,00000000,00000000,00000410,00000000,00156ee8
L"C:\\users\\Public\\Application Data\\FXWebPlayer",007e4b40,007e4b30)
ret=7e223af6
002d:Ret KERNEL32.CreateProcessW() retval=00000000 ret=7e223af6
...
002d:Call
KERNEL32.FormatMessageW(00001000,00000000,00000002,00000000,007e3bc8,00000800,00000000)
ret=7e2275f6
002d:Ret KERNEL32.FormatMessageW() retval=00000011 ret=7e2275f6
002d:Call user32.MessageBoxW(00000000,007e3bc8 L"File not
found.\r\n",00000000,00000010) ret=7e22761e
--- snip ---
The bootstrapper downloads and verifies package successfully.
It unpacks the files to a temporary location:
--- snip ---
$ ls -1sh
users/focht/Temp/\{02B22974-0252-4c1a-AC08-0346941DEA7A\}/fxwebplayer/data/
total 8.8M
328K 7zr.exe
796K dbghelp.dll
32K FXCaps.dll
224K Fxp.dll
844K fxplanet.ocx
980K FXWebPlayer.exe
1.1M MFC71.dll
1.1M mfc80.dll
4.0K Microsoft.VC80.CRT.manifest
4.0K Microsoft.VC80.MFC.manifest
488K msvcp71.dll
536K msvcp80.dll
340K msvcr71.dll
612K msvcr80.dll
932K npfxplanet.dll
4.0K packages.wu2
748K w2i.exe
4.0K wu2_uninstall.cfg
4.0K WuDescriptor.upd
--- snip ---
It then proceeds to execute some script/config items which seems to be a custom
installer engine.
'wu2_install.EN.cfg':
--- snip ---
//Renombra el plugin
Rename {
From "$DEST\npfxplanet.dll"
To "$DEST\_npfxplanet.dll"
}
Rename {
From "$DEST\fxplanet.ocx"
To "$DEST\_fxplanet.ocx"
}
//Copia los archivos
Move {
Source "$SRC\Data\*.*"
Destination "$DEST"
}
...
--- snip ---
The culprit (as already seen in trace log) is 'FO_MOVE' operation of
'SHFileOperation':
--- snip ---
Wine-dbg>c
Stopped on breakpoint 1 at 0x7e469c6f SHFileOperationA
[/home/focht/projects/wine/wine.repo/src/dlls/shell32/shlfileop.c:867] in
shell32
867 {
Wine-dbg>p *lpFileOp
{hwnd=(nil), wFunc=0x1,
pFrom="C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\Data\*.*",
pTo="C:\users\Public\Application Data\FXWebPlayer", fFlags=0x614,
fAnyOperationsAborted=0x5adc0000, hNameMappings=0x7e, lpszProgressTitle=***
invalid address 0x5ac00000 ***}
...
Wine-dbg>bt
Backtrace:
=>0 0x7e46b304 move_files(lpFileOp=0x7e57e2, flFrom=0x7e5784, flTo=0x7e576c)
[/home/focht/projects/wine/wine.repo/src/dlls/shell32/shlfileop.c:1404] in
shell32 (0x007e57b8)
1 0x7e469da7 SHFileOperationA+0x137(lpFileOp=<couldn't compute location>)
[/home/focht/projects/wine/wine.repo/src/dlls/shell32/shlfileop.c:887] in
shell32 (0x007e5828)
2 0x0041140d in fxwebplayer (+0x1140c) (0x007e5914)
Wine-dbg>p *flFrom
{feFiles=0x1429c0, num_alloc=0x20, dwNumFiles=0x13, bAnyFromWildcard=0x1,
bAnyDirectories=0, bAnyDontExist=0}
Wine-dbg>p *flFrom->feFiles
{attributes=0x20,
szDirectory="C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\Data",
szFilename="7zr.exe",
szFullPath="C:\users\focht\Temp\{02B22974-0252-4c1a-AC08-0346941DEA7A}\fxwebplayer\Data\7zr.exe",
bFromWildcard=0x1, bFromRelative=0, bExists=0}
Wine-dbg>p *flTo
{feFiles=0x144750, num_alloc=0x20, dwNumFiles=0x1, bAnyFromWildcard=0,
bAnyDirectories=0x1, bAnyDontExist=0}
Wine-dbg>p *flTo->feFiles
{attributes=0x10, szDirectory="C:\users\Public\Application Data",
szFilename="FXWebPlayer", szFullPath="C:\users\Public\Application
Data\FXWebPlayer", bFromWildcard=0, bFromRelative=0, bExists=0x1}
Wine-dbg>n
1422 if (!(lpFileOp->fFlags & FOF_MULTIDESTFILES) &&
Wine-dbg>n
1424 flFrom->dwNumFiles > flTo->dwNumFiles)
Wine-dbg>n
1423 !flFrom->bAnyDirectories &&
Wine-dbg>n
1426 return ERROR_CANCELLED;
--- snip ---
Source:
https://source.winehq.org/git/wine.git/blob/637bcd5de91bb1265b58c41af660749cc4d66994:/dlls/shell32/shlfileop.c#l1402
--- snip ---
1402 /* the FO_MOVE operation */
1403 static int move_files(LPSHFILEOPSTRUCTW lpFileOp, const FILE_LIST *flFrom,
const FILE_LIST *flTo)
1404 {
1405 DWORD i;
1406 INT mismatched = 0;
1407 const FILE_ENTRY *entryToMove;
1408 const FILE_ENTRY *fileDest;
1409
1410 if (!flFrom->dwNumFiles)
1411 return ERROR_SUCCESS;
1412
1413 if (!flTo->dwNumFiles)
1414 return ERROR_FILE_NOT_FOUND;
1415
1416 if (!(lpFileOp->fFlags & FOF_MULTIDESTFILES) &&
1417 flTo->dwNumFiles > 1 && flFrom->dwNumFiles > 1)
1418 {
1419 return ERROR_CANCELLED;
1420 }
1421
1422 if (!(lpFileOp->fFlags & FOF_MULTIDESTFILES) &&
1423 !flFrom->bAnyDirectories &&
1424 flFrom->dwNumFiles > flTo->dwNumFiles)
1425 {
1426 return ERROR_CANCELLED;
1427 }
...
--- snip ---
The code was introduced with this huge commit:
https://source.winehq.org/git/wine.git/commitdiff/1be970d48572d6f988eeedb6e39bf57b141b555e
("shell32: Reimplement a factored SHFileOperation.") several years ago.
Interesting it went unnoticed all the time. A wildcard move operation is not
that uncommon.
$ sha1sum FXWebPlayer.exe
7ac6feccd6fd4438cf3d773b4a792c9d31458778 FXWebPlayer.exe
$ du -sh FXWebPlayer.exe
744K FXWebPlayer.exe
$ wine --version
wine-1.7.51-102-ga7e294c
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