Hello,
I'm trying to get the Adobe Photoshop Elements 8.0 installer to work and noticed the license screen doesn't show up when running the installer using wine. A trace shows that a custom action (CA_EULA_ExtractEulaFiles) generates a page fault.
The cause of the crash is that MsiGetActiveDatabase is called on a remote handle that is actually a database handle (not a package handle as expected). A simple proof of concept would be to call this from a custom action handler in a dll:
MsiGetActiveDatabase(MsiGetActiveDatabase(hPackage));
MsiGetActiveDatabase will call msi_get_remote and cast the result to IWineMsiRemotePackage, then call IWineMsiRemotePackage_GetActiveDatabase. Because our handle is actually a database handle, instead of calling mrp_GetActiveDatabase, it will call mrd_GetPrimaryKeys. This leads to a crash (see attached log).
The correct behavior for MsiGetActiveDatabase is to return 0 when called with an invalid handle.
I made a patch for this (also attached). In order to check if the com object is actually an IWineMsiRemotePackage, I compare the IUnknown->lpVtbl pointer against msi_remote_package_vtbl. This looks a bit messy, but I found no other way to do it. I'm posting the patch here for review first.
Octavian