From 19632223ee00a8305acadc90a52828ddeb0bfaa4 Mon Sep 17 00:00:00 2001 From: Bob Arnson Date: Tue, 17 Jun 2025 22:12:41 -0400 Subject: Fix MsiLockPermissionsEx decompilation. Fixes https://github.com/wixtoolset/issues/issues/9096 --- .../Decompile/Decompiler.cs | 7 ++--- .../DecompileFixture.cs | 12 +++++++++ .../TestData/Decompile/LockPermissions.msi | Bin 0 -> 32768 bytes .../Decompile/LockPermissions_expected.wxs | 30 +++++++++++++++++++++ .../TestData/Decompile/LockPermissions_src.wxs | 22 +++++++++++++++ .../TestData/Decompile/MsiLockPermissionsEx.msi | Bin 0 -> 32768 bytes .../Decompile/MsiLockPermissionsEx_expected.wxs | 30 +++++++++++++++++++++ .../Decompile/MsiLockPermissionsEx_src.wxs | 22 +++++++++++++++ 8 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/LockPermissions.msi create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/LockPermissions_expected.wxs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/LockPermissions_src.wxs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/MsiLockPermissionsEx.msi create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/MsiLockPermissionsEx_expected.wxs create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/MsiLockPermissionsEx_src.wxs diff --git a/src/wix/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs b/src/wix/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs index 7e28df5d..9cc3d88e 100644 --- a/src/wix/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs +++ b/src/wix/WixToolset.Core.WindowsInstaller/Decompile/Decompiler.cs @@ -1444,12 +1444,13 @@ namespace WixToolset.Core.WindowsInstaller.Decompile /// private void FinalizePermissionsTable(TableIndexedCollection tables, string tableName) { - var createFoldersById = this.IndexTableOneToMany(tables, tableName); + var createFoldersById = this.IndexTableOneToMany(tables, "CreateFolder"); + var msiLockPermissionsEx = tableName == "MsiLockPermissionsEx"; foreach (var row in tables[tableName]?.Rows ?? Enumerable.Empty()) { - var id = row.FieldAsString(0); - var table = row.FieldAsString(1); + var id = row.FieldAsString(msiLockPermissionsEx ? 1 : 0); + var table = row.FieldAsString(msiLockPermissionsEx ? 2 : 1); var xPermission = this.DecompilerHelper.GetIndexedElement(row); if ("CreateFolder" == table) diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/DecompileFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/DecompileFixture.cs index 86da7ebd..b9d14ed9 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/DecompileFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/DecompileFixture.cs @@ -107,6 +107,18 @@ namespace WixToolsetTest.CoreIntegration DecompileAndCompare("ui.msi", extract: false, "ExpectedUI.wxs", "TestData", "Decompile"); } + [Fact] + public void CanDecompileMsiLockPermissionsEx() + { + DecompileAndCompare("MsiLockPermissionsEx.msi", extract: false, "MsiLockPermissionsEx_expected.wxs", "TestData", "Decompile"); + } + + [Fact] + public void CanDecompileLockPermissions() + { + DecompileAndCompare("LockPermissions.msi", extract: false, "LockPermissions_expected.wxs", "TestData", "Decompile"); + } + [Fact] public void CanDecompileMergeModuleWithKeepModularizationIds() { diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/LockPermissions.msi b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/LockPermissions.msi new file mode 100644 index 00000000..510990ac Binary files /dev/null and b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/LockPermissions.msi differ diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/LockPermissions_expected.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/LockPermissions_expected.wxs new file mode 100644 index 00000000..253f2cda --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/LockPermissions_expected.wxs @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/LockPermissions_src.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/LockPermissions_src.wxs new file mode 100644 index 00000000..dcb2fd50 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/LockPermissions_src.wxs @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/MsiLockPermissionsEx.msi b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/MsiLockPermissionsEx.msi new file mode 100644 index 00000000..e117dcc3 Binary files /dev/null and b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/MsiLockPermissionsEx.msi differ diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/MsiLockPermissionsEx_expected.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/MsiLockPermissionsEx_expected.wxs new file mode 100644 index 00000000..7cf9df67 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/MsiLockPermissionsEx_expected.wxs @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/MsiLockPermissionsEx_src.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/MsiLockPermissionsEx_src.wxs new file mode 100644 index 00000000..9ffc7b56 --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Decompile/MsiLockPermissionsEx_src.wxs @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3-55-g6feb