From: Billy Laws blaws05@gmail.com
--- dlls/msi/package.c | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-)
diff --git a/dlls/msi/package.c b/dlls/msi/package.c index 294946d16eb..b8966a0df90 100644 --- a/dlls/msi/package.c +++ b/dlls/msi/package.c @@ -1161,27 +1161,39 @@ static UINT parse_suminfo( MSISUMMARYINFO *si, MSIPACKAGE *package ) return ERROR_SUCCESS; }
+static BOOL validate_package_platform( enum platform platform ) +{ + USHORT proc_machine, native_machine; + IsWow64Process2( GetCurrentProcess(), &proc_machine, &native_machine ); + switch (platform) + { + case PLATFORM_INTEL: + return native_machine == IMAGE_FILE_MACHINE_I386 || + native_machine == IMAGE_FILE_MACHINE_AMD64 || + native_machine == IMAGE_FILE_MACHINE_ARM64; + case PLATFORM_X64: + return native_machine == IMAGE_FILE_MACHINE_AMD64 || + native_machine == IMAGE_FILE_MACHINE_ARM64; + case PLATFORM_ARM: + return native_machine == IMAGE_FILE_MACHINE_ARM; + case PLATFORM_ARM64: + return native_machine == IMAGE_FILE_MACHINE_ARM64; + case PLATFORM_INTEL64: + default: + return FALSE; + } +} + static UINT validate_package( MSIPACKAGE *package ) { UINT i;
- if (package->platform == PLATFORM_INTEL64) - return ERROR_INSTALL_PLATFORM_UNSUPPORTED; -#ifndef __arm__ - if (package->platform == PLATFORM_ARM) - return ERROR_INSTALL_PLATFORM_UNSUPPORTED; -#endif -#ifndef __aarch64__ - if (package->platform == PLATFORM_ARM64) + if (!validate_package_platform( package->platform )) return ERROR_INSTALL_PLATFORM_UNSUPPORTED; -#endif - if (package->platform == PLATFORM_X64) - { - if (!is_64bit && !is_wow64) - return ERROR_INSTALL_PLATFORM_UNSUPPORTED; - if (package->version < 200) - return ERROR_INSTALL_PACKAGE_INVALID; - } + + if (package->platform == PLATFORM_X64 && package->version < 200) + return ERROR_INSTALL_PACKAGE_INVALID; + if (!package->num_langids) { return ERROR_SUCCESS;