[Bug 46830] Gaea 1.0.14.8002 installer stops: err:msi: ITERATE_Actions Execution halted, action L"WixSchedInternetShortcuts" returned 1603 (MsiViewGetErrorA/W() needs to be RPC-compatible)

wine-bugs at winehq.org wine-bugs at winehq.org
Wed Mar 13 18:11:41 CDT 2019


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

Anastasius Focht <focht at gmx.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |Installer
                 CC|                            |focht at gmx.net
          Component|-unknown                    |msi
            Summary|Gaea 1.0.14.8002 installer  |Gaea 1.0.14.8002 installer
                   |stops:                      |stops:
                   |err:msi:ITERATE_Actions     |err:msi:ITERATE_Actions
                   |Execution halted, action    |Execution halted, action
                   |L"WixSchedInternetShortcuts |L"WixSchedInternetShortcuts
                   |" returned 1603             |" returned 1603
                   |                            |(MsiViewGetErrorA/W() needs
                   |                            |to be RPC-compatible)

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

confirming.

Relevant part of trace log:

--- snip ---
$ WINEDEBUG=+seh,+relay,+msi wine msiexec -i Gaea-1.0.15.8003.msi >>log.txt
2>&1
...
0036:trace:msi:ACTION_CustomAction Handling custom action
L"WixSchedInternetShortcuts" (1 L"WixCA" L"WixSchedInternetShortcuts") 
...
0036:trace:msi:HANDLE_CustomType1 Calling function L"WixSchedInternetShortcuts"
from L"C:\\users\\focht\\Temp\\msi18b0.tmp" 
...
003d:trace:msi:MsiGetComponentStateW 1 L"InternetShortcut" 0x92bfbb8 0x92bfbc0
003d:trace:msi:MSI_GetComponentStateW 0x17c678 L"InternetShortcut" 0x92bfbb8
0x92bfbc0
003d:trace:msi:MSI_GetComponentStateW states (2, 3)
...
003b:Call msi.MsiRecordSetStringA(00000005,00000000,100330b0
"WixSchedInternetShortcuts:  Adding folder
'ProgramMenuFolder.QuadSpinner.Gaea', component 'InternetShortcut' to the
CreateFolder table") ret=1000da1a 
...
003e:Call KERNEL32.WideCharToMultiByte(00000000,00000000,00696a88
L"WixSchedInternetShortcuts:  Adding folder
'ProgramMenuFolder.QuadSpinner.Gaea', component 'InternetShortcut' to the
CreateFolder table",ffffffff,00000000,00000000,00000000,00000000) ret=7e942181 
...
003b:Call msi.MsiDatabaseOpenViewW(00000002,0016b810 L"SELECT * FROM
`CreateFolder`",0055fce0) ret=1000ed0a
003b:trace:msi:MsiDatabaseOpenViewW L"SELECT * FROM `CreateFolder`" 0x55fce0
...
003d:trace:msi:MsiDatabaseOpenViewW L"SELECT * FROM `CreateFolder`" 0x92bfbc0
003d:trace:msi:MSI_DatabaseOpenViewW L"SELECT * FROM `CreateFolder`" 0x92bf990
...
003d:trace:msi:MSI_ParseSQL Parse returned 0
003d:trace:msi:alloc_msihandle 0x6962b8 -> 4
...
003b:trace:msi:alloc_msi_remote_handle 4 -> 5
003b:Ret  msi.MsiDatabaseOpenViewW() retval=00000000 ret=1000ed0a
003b:Call msi.MsiViewExecute(00000005,00000000) ret=1000ed45
003b:trace:msi:MsiViewExecute 5 0
...
003e:trace:msi:MsiViewExecute 4 0
003e:trace:msi:MSI_ViewExecute 0x6962b8 (nil)
003e:trace:msi:MsiCloseHandle 0
...
003b:Ret  msi.MsiViewExecute() retval=00000000 ret=1000ed45
003b:Call msi.MsiViewGetColumnInfo(00000005,00000001,0055fcdc) ret=1000dc5a
003b:trace:msi:MsiViewGetColumnInfo 5 1 0x55fcdc
...
003d:trace:msi:MsiViewGetColumnInfo 4 1 0x92bf9d8
...
003d:trace:msi:msi_set_record_type_string type 2d48 -> L"s72"
...
003d:trace:msi:msi_set_record_type_string type 2d48 -> L"s72"
...
003d:trace:msi:alloc_msihandle 0x696260 -> 5
...
003b:Ret  msi.MsiViewGetColumnInfo() retval=00000000 ret=1000dc5a
003b:Call msi.MsiCreateRecord(00000002) ret=1000dc99
...
003b:trace:msi:alloc_msihandle 0x16cf88 -> 7
003b:Ret  msi.MsiCreateRecord() retval=00000007 ret=1000dc99
...
003b:Call msi.MsiRecordGetStringW(00000006,00000001,0016cfd8,0055fa48)
ret=1000ea59
003b:Ret  msi.MsiRecordGetStringW() retval=00000000 ret=1000ea59
003b:Call msi.MsiRecordSetStringW(00000007,00000001,0016ceb8
L"ProgramMenuFolder.QuadSpinner.Gaea") ret=1000de02
...
003b:Ret  msi.MsiRecordSetStringW() retval=00000000 ret=1000de02
...
003b:Call msi.MsiRecordGetStringW(00000006,00000002,0016cfd8,0055fa48)
ret=1000ea59
003b:Ret  msi.MsiRecordGetStringW() retval=00000000 ret=1000ea59
003b:Call msi.MsiRecordSetStringW(00000007,00000002,0016d870
L"InternetShortcut") ret=1000de02
...
003b:Ret  msi.MsiRecordSetStringW() retval=00000000 ret=1000de02
003b:Call msi.MsiViewModify(00000005,00000007,00000007) ret=1000de26
003b:trace:msi:MsiViewModify 5 7 7 
...
003e:trace:msi:alloc_msihandle 0x696260 -> 5
003e:trace:msi:MsiViewModify 4 7 5
003e:trace:msi:MsiCloseHandle 5
003e:trace:msi:MsiCloseHandle handle 5 destroyed
...
003b:Ret  msi.MsiViewModify() retval=0000065b ret=1000de26
003b:Call msi.MsiViewModify(00000005,00000009,00000007) ret=1000de4c
003b:trace:msi:MsiViewModify 5 9 7
...
003d:trace:msi:alloc_msihandle 0x6947e8 -> 5
003d:trace:msi:MsiViewModify 4 9 5
003d:trace:msi:MsiCloseHandle 5
003d:trace:msi:MsiCloseHandle handle 5 destroyed 
...
003b:Ret  msi.MsiViewModify() retval=0000000d ret=1000de4c
003b:Call msi.MsiViewGetErrorW(00000005,0055fa74,0055fa60) ret=1000de7a
003b:trace:msi:MsiViewGetErrorW 5 0x55fa74 0x55fa60
003b:Ret  msi.MsiViewGetErrorW() retval=fffffffd ret=1000de7a
003b:Ret  msi.MsiViewGetErrorW() retval=fffffffd ret=1000de7a
003b:Call KERNEL32.GetLastError() ret=10017048
...
003b:Call msi.MsiRecordSetStringA(00000008,00000000,100330b0
"WixSchedInternetShortcuts:  Error 0x8007000d: failed to add temporary row,
dberr: -3, err: ") ret=1000da1a
...
003b:Call msi.MsiRecordSetStringA(00000007,00000000,100330b0
"WixSchedInternetShortcuts:  Error 0x8007000d: Couldn't add temporary
CreateFolder row") ret=1000da1a 
...
0036:err:msi:ITERATE_Actions Execution halted, action
L"WixSchedInternetShortcuts" returned 1603
--- snip ---

Debug session:

--- snip ---
Wine-gdb> bt
#0  table_validate_new (tv=0x5bb490, rec=0x5bbea0, column=0x0) at
/home/focht/projects/wine/mainline-src/dlls/msi/table.c:1636
#1  0x00007fb3ef2d2921 in TABLE_modify (view=0x5bb490,
eModifyMode=MSIMODIFY_INSERT_TEMPORARY, rec=0x5bbea0, row=0xffffffff) at
/home/focht/projects/wine/mainline-src/dlls/msi/table.c:1889
#2  0x00007fb3ef296ed5 in MSI_ViewModify (query=0x5b90b0,
mode=MSIMODIFY_INSERT_TEMPORARY, rec=0x5bbea0) at
/home/focht/projects/wine/mainline-src/dlls/msi/msiquery.c:712
#3  0x00007fb3ef29722f in MsiViewModify (hView=0x4,
eModifyMode=MSIMODIFY_INSERT_TEMPORARY, hRecord=0x5) at
/home/focht/projects/wine/mainline-src/dlls/msi/msiquery.c:763
#4  0x00007fb3ef299681 in s_remote_ViewModify (view=0x4,
mode=MSIMODIFY_INSERT_TEMPORARY, remote_rec=0x5bbe20,
remote_refreshed=0x2cbf668)
    at /home/focht/projects/wine/mainline-src/dlls/msi/msiquery.c:1235
#5  0x00007fb3ef2e930b in IWineMsiRemote_remote_ViewModify
(_pRpcMessage=0x5baa10) at winemsi_s.c:651
#6  0x00007fb3ee6a74ca in process_request_packet (conn=0x5b71c0, hdr=0x5bbbe0,
msg=0x5baa10) at
/home/focht/projects/wine/mainline-src/dlls/rpcrt4/rpc_server.c:439
#7  0x00007fb3ee6a7a4f in RPCRT4_process_packet (conn=0x5b71c0, hdr=0x5bbbe0,
msg=0x5baa10, auth_data=0x0, auth_length=0x0)
    at /home/focht/projects/wine/mainline-src/dlls/rpcrt4/rpc_server.c:517
#8  0x00007fb3ee6a7c8e in RPCRT4_worker_thread (the_arg=0x86d30) at
/home/focht/projects/wine/mainline-src/dlls/rpcrt4/rpc_server.c:539
#9  0x000000007bd433df in process_rtl_work_item (instance=0x2cbfbe0,
userdata=0x5b7320) at
/home/focht/projects/wine/mainline-src/dlls/ntdll/threadpool.c:349
#10 0x000000007bd49036 in threadpool_worker_proc (param=0x5b8760) at
/home/focht/projects/wine/mainline-src/dlls/ntdll/threadpool.c:2126
#11 0x000000007bd30fba in call_thread_func (entry=0x7bd48bd5
<threadpool_worker_proc>, arg=0x5b8760) at
/home/focht/projects/wine/mainline-src/dlls/ntdll/signal_x86_64.c:4454
#12 0x0000000000000000 in ?? ()

Wine-gdb> p *tv
$14 = {view = {hdr = {magic = 0x0, type = 0x0, refcount = 0x0, destructor =
0x0}, ops = 0x7fb3ef33dc80 <table_ops>, error = MSIDBERROR_NOERROR,
error_column = 0x0}, db = 0x76040, 
  table = 0x94cc0, columns = 0x94d30, num_cols = 0x2, row_size = 0x6, name =
{0x43}}

Wine-gdb> p *rec
$15 = {hdr = {magic = 0x4d434923, type = 0x4, refcount = 0x2, destructor =
0x7fb3ef2a8fcd <MSI_CloseRecord>}, count = 0x2, cookie = 0x0, fields = {{type =
0x0, u = {iVal = 0x0, 
        szwVal = 0x0, stream = 0x0}, len = 0x0}}}

Wine-gdb> x/sh str
0x5bbf20:    u"ProgramMenuFolder.QuadSpinner.Gaea"
...
Wine-gdb> x/sh str
0x5bb550:    u"InternetShortcut"

...
Wine-gdb> bt
#0  msi_table_find_row (tv=0x5bb490, rec=0x5bbea0, row=0x2cbefb4, column=0x0)
at /home/focht/projects/wine/mainline-src/dlls/msi/table.c:2492
#1  0x00007fb3ef2d1ce4 in table_validate_new (tv=0x5bb490, rec=0x5bbea0,
column=0x0) at /home/focht/projects/wine/mainline-src/dlls/msi/table.c:1661

2494            r = msi_row_matches( tv, i, data, column );
Wine-gdb> n
2495            if( r == ERROR_SUCCESS )
Wine-gdb> n
2497                *row = i;
Wine-gdb> info locals
i = 0x5
r = 0x0
data = 0x5bbf80

Wine-gdb> n
table_validate_new (tv=0x5bb490, rec=0x5bbea0, column=0x0) at
/home/focht/projects/wine/mainline-src/dlls/msi/table.c:1662
1662        if (r == ERROR_SUCCESS)
Wine-gdb> n
1663            return ERROR_FUNCTION_FAILED;

...
Thread 3 hit Breakpoint 1, MSI_ViewModify (query=0x5b90b0,
mode=MSIMODIFY_VALIDATE_NEW, rec=0x5bbea0) at
/home/focht/projects/wine/mainline-src/dlls/msi/msiquery.c:699
699        MSIVIEW *view = NULL;
...
Wine-gdb> n
712        r = view->ops->modify( view, mode, rec, query->row - 1 );
...
Wine-gdb> n
TABLE_modify (view=0x5bb4e0, eModifyMode=MSIMODIFY_VALIDATE_NEW, rec=0x5bbea0,
row=4294967295) at /home/focht/projects/wine/mainline-src/dlls/msi/table.c:1873
1873            if (r != ERROR_SUCCESS)
Wine-gdb> n
1875                tv->view.error = MSIDBERROR_DUPLICATEKEY;
Wine-gdb> n
...
Wine-gdb> n
713        if (mode == MSIMODIFY_DELETE && r == ERROR_SUCCESS)
Wine-gdb> p r
$2 = 0xd

--- snip ---

Relevant dump of 'CreateFolder' table with ORCA:

--- snip ---
Directory_    Component_
s72    s72

ProgramFiles64Folder    Registry.1
ProgramFiles64Folder    Registry.2
ProgramMenuFolder.QuadSpinner.Gaea    Component.Gaea_
ProgramMenuFolder.QuadSpinner.Gaea    Component.Gaea__Safe_Mode_
ProgramMenuFolder.QuadSpinner.Gaea    Component.Watson_Diagnostics_Tool
ProgramMenuFolder.QuadSpinner.Gaea    InternetShortcut
DesktopFolder    Component.Gaea.1
TARGETDIR    TARGETDIR
--- snip ---

Relevant dump of 'CustomAction' table with ORCA:

--- snip ---
WixSchedInternetShortcuts    1    WixCA    WixSchedInternetShortcuts    
--- snip ---

Relevant dump of 'InstallExecuteSequence' table with ORCA

--- snip ---
WixSchedInternetShortcuts    VersionNT > 400    3599
--- snip ---

The user-visible symptom is essentially bug 27338 which was fixed 8 years ago.

I already did a thorough accurate analysis there, hence I only repeat the
summary:

--- quote ---
...
The insertion of last temporary WixInternetShortcut record fails due to folder
already existing in "CreateFolder" table -> duplicate item.
This error is usually harmless but must be propagated somehow.
Msi only returns ERROR_FUNCTION_FAILED on temporary row insertion failure.
The installer tries to figure out exact error and issues
MSIMODIFY_VALIDATE_NEW,
...
The following MsiViewGetErrorW() to fetch the detailed error should actually
return MSIDBERROR_DUPLICATEKEY. The installer recognizes this error code and
does not fail if returned.
--- quote ---

The MSI remoting rework (MSI custom actions run in separate server process)
from April 2018 by Zebediah missed this one. MsiViewGetErrorA/W() needs to be
remotable (RPC compatible) too - currently it's not.

https://source.winehq.org/git/wine.git/blob/HEAD:/dlls/msi/msiquery.c#l770

--- snip ---
 770 MSIDBERROR WINAPI MsiViewGetErrorW( MSIHANDLE handle, LPWSTR buffer,
LPDWORD buflen )
 771 {
 772     MSIQUERY *query;
 773     const WCHAR *column;
 774     MSIDBERROR r;
 775     DWORD len;
 776 
 777     TRACE("%u %p %p\n", handle, buffer, buflen);
 778 
 779     if (!buflen)
 780         return MSIDBERROR_INVALIDARG;
 781 
 782     query = msihandle2msiinfo( handle, MSIHANDLETYPE_VIEW );
 783     if( !query )
 784         return MSIDBERROR_INVALIDARG;
 785 
 786     if ((r = query->view->error)) column = query->view->error_column;
 787     else column = szEmpty;
 788 
 789     len = strlenW( column );
 790     if (buffer)
 791     {
 792         if (*buflen > len)
 793             strcpyW( buffer, column );
 794         else
 795             r = MSIDBERROR_MOREDATA;
 796     }
 797     *buflen = len;
 798     msiobj_release( &query->hdr );
 799     return r;
 800 }
--- snip ---

$ sha1sum Gaea-1.0.15.8003.msi 
173154a11ce7730cf65f7a32d7616c0952e35f71  Gaea-1.0.15.8003.msi

$ du -sh Gaea-1.0.15.8003.msi 
46M    Gaea-1.0.15.8003.msi

$ wine --version
wine-4.3-338-gf34f13825f

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