[Bug 27971] the /qb option of msiexec results in unhandled page fault
wine-bugs at winehq.org
wine-bugs at winehq.org
Thu Aug 4 20:01:40 CDT 2011
http://bugs.winehq.org/show_bug.cgi?id=27971
--- Comment #2 from Hin-Tak Leung <htl10 at users.sourceforge.net> 2011-08-04 20:01:39 CDT ---
(In reply to comment #1)
> Please attach a +msi trace. Make sure you have debug symbols in your
> backtrace.
Thanks for the +msi tips. So I did the WINEDEBUG=+msi , and the relevant info
is below:
--------------------
trace:msi:msi_get_property property L"SourceDir" not found
Backtrace:
=>0 0x6838dfe8 msi_load_media_info+0x2c8() in msi (0x001e80c4)
1 0x6837f0e3 ACTION_InstallFiles+0x1d2() in msi (0x001e80a0)
2 0x68345bbd ACTION_HandleStandardAction+0xcc() in msi (0x6837ef10)
3 0x68355db3 ACTION_PerformAction+0x42() in msi (0x00196bd8)
4 0x6835655b ITERATE_Actions+0xaa() in msi (0x00196bd8)
5 0x6839f2a9 MSI_IterateRecords+0x68() in msi (0x683564b0)
6 0x68345035 ACTION_ProcessExecSequence+0x114() in msi (0x00175546)
7 0x68356b26 MSI_InstallPackage+0x315() in msi (0x00175546)
8 0x68391786 MsiInstallProductW+0xf5() in msi (0x00000000)
0x6838dfe8 msi_load_media_info+0x2c8 in msi: movzwl 0x0(%edx,%eax,1),%ecx
-------------------
I then ran 'objdump -f -d msi.dll.so' and found that the crash was lstrcpyW()
trying to copy NULL from a previous 'msi_dup_property(.., szSourceDir)' result.
So I made this patch:
----------------------
diff --git a/dlls/msi/media.c b/dlls/msi/media.c
index c879af1..316c72a 100644
--- a/dlls/msi/media.c
+++ b/dlls/msi/media.c
@@ -681,6 +681,7 @@ UINT msi_load_media_info(MSIPACKAGE *package, UINT
Sequence, MSIMEDIAINFO *mi)
'S','E','L','E','C','T',' ','*',' ','F','R','O','M','
','`','M','e','d','i','a','`',' ',
'W','H','E','R','E','
','`','L','a','s','t','S','e','q','u','e','n','c','e','`',' ',
'>','=',' ','%','i',' ','O','R','D','E','R',' ','B','Y','
','`','D','i','s','k','I','d','`',0};
+ static const WCHAR empty_dir[] = {0};
MSIRECORD *row;
LPWSTR source_dir, source;
DWORD options;
@@ -711,6 +712,8 @@ UINT msi_load_media_info(MSIPACKAGE *package, UINT
Sequence, MSIMEDIAINFO *mi)
msi_set_sourcedir_props(package, FALSE);
source_dir = msi_dup_property(package->db, szSourceDir);
+ if (!source_dir)
+ source_dir = strdupW(empty_dir);
lstrcpyW(mi->sourcedir, source_dir);
PathAddBackslashW(mi->sourcedir);
mi->type = get_drive_type(source_dir);
---------------
This patch puts a empty wide string into source_dir if source_dir is NULL.
After applying this patch, it is somewhat curious that /qb works if I run it
TWICE in a row!
It is as if the first time fails but copy the msi somewhere anyway
(%WINDOWS%/Installer/ ? ) to allow the 2nd time to find it at some default
location?
So the patch is a step in the right direction but not yet completely correct -
any comments on improvements?
--
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
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