From b4fe940cd1cb5798bc3e68a686289b8020cf7110 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Tue, 18 Apr 2023 09:02:59 -0700 Subject: Do not crash on Subdirectory when missing Component Directory attribute Fixes 7407 --- src/wix/WixToolset.Core/Compiler.cs | 3 +-- .../ComponentFixture.cs | 31 +++++++++++++++++++++- .../Component/MissingDirectoryWithSubdirectory.wxs | 10 +++++++ 3 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 src/wix/test/WixToolsetTest.CoreIntegration/TestData/Component/MissingDirectoryWithSubdirectory.wxs diff --git a/src/wix/WixToolset.Core/Compiler.cs b/src/wix/WixToolset.Core/Compiler.cs index babde97d..70e246a5 100644 --- a/src/wix/WixToolset.Core/Compiler.cs +++ b/src/wix/WixToolset.Core/Compiler.cs @@ -2254,8 +2254,7 @@ namespace WixToolset.Core { this.Core.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, node.Name.LocalName, "Directory")); } - - if (!String.IsNullOrEmpty(subdirectory)) + else if (!String.IsNullOrEmpty(subdirectory)) { directoryId = this.Core.CreateDirectoryReferenceFromInlineSyntax(sourceLineNumbers, directoryId, subdirectory); } diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/ComponentFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/ComponentFixture.cs index 94900ee0..9348afa5 100644 --- a/src/wix/test/WixToolsetTest.CoreIntegration/ComponentFixture.cs +++ b/src/wix/test/WixToolsetTest.CoreIntegration/ComponentFixture.cs @@ -34,12 +34,41 @@ namespace WixToolsetTest.CoreIntegration }); var errors = result.Messages.Where(m => m.Level == MessageLevel.Error); - Array.Equals(new[] + Assert.Equal(new[] { 369, 369 }, errors.Select(e => e.Id).ToArray()); } } + + [Fact] + public void CannotBuildMissingDirectoryAttributeWithSubdirectory() + { + var folder = TestData.Get(@"TestData"); + + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var intermediateFolder = Path.Combine(baseFolder, "obj"); + var msiPath = Path.Combine(baseFolder, "bin", "test.msi"); + + var result = WixRunner.Execute(new[] + { + "build", + Path.Combine(folder, "Component", "MissingDirectoryWithSubdirectory.wxs"), + Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"), + "-bindpath", Path.Combine(folder, "SingleFile", "data"), + "-intermediateFolder", intermediateFolder, + "-o", msiPath + }); + + var errors = result.Messages.Select(m => m.ToString()).ToArray(); + WixAssert.CompareLineByLine(new[] + { + "The Component/@Directory attribute was not found; it is required." + }, errors); + } + } } } diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Component/MissingDirectoryWithSubdirectory.wxs b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Component/MissingDirectoryWithSubdirectory.wxs new file mode 100644 index 00000000..cefa9abc --- /dev/null +++ b/src/wix/test/WixToolsetTest.CoreIntegration/TestData/Component/MissingDirectoryWithSubdirectory.wxs @@ -0,0 +1,10 @@ + + + + + + + + + + -- cgit v1.2.3-55-g6feb