Skip to content
/ wix Public

Commit e2842da

Browse files
committed
Use case insensitive compares for paths during harvesting
Fixes 9213
1 parent 49924eb commit e2842da

File tree

4 files changed

+54
-4
lines changed

4 files changed

+54
-4
lines changed

src/wix/WixToolset.Core/HarvestFilesAndPayloadsCommand.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ namespace WixToolset.Core
1414
internal class HarvestFilesAndPayloadsCommand
1515
{
1616
private const string BindPathOpenString = "!(bindpath.";
17+
private static readonly char[] SplitSemicolons = { ';' };
1718

1819
public HarvestFilesAndPayloadsCommand(IOptimizeContext context)
1920
{
@@ -54,8 +55,8 @@ private void HarvestFiles(HarvestFilesSymbol harvestFile, IntermediateSection se
5455
{
5556
var unusedSectionCachedInlinedDirectoryIds = new Dictionary<string, string>();
5657

57-
var inclusions = harvestFile.Inclusions.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
58-
var exclusions = harvestFile.Exclusions.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
58+
var inclusions = harvestFile.Inclusions.Split(SplitSemicolons, StringSplitOptions.RemoveEmptyEntries);
59+
var exclusions = harvestFile.Exclusions.Split(SplitSemicolons, StringSplitOptions.RemoveEmptyEntries);
5960

6061
var comparer = new WildcardFileComparer();
6162

@@ -312,12 +313,12 @@ private class WildcardFileComparer : IEqualityComparer<WildcardFile>
312313
{
313314
public bool Equals(WildcardFile x, WildcardFile y)
314315
{
315-
return x?.Path == y?.Path;
316+
return StringComparer.OrdinalIgnoreCase.Equals(x?.Path, y?.Path);
316317
}
317318

318319
public int GetHashCode(WildcardFile obj)
319320
{
320-
return obj?.Path?.GetHashCode() ?? 0;
321+
return obj?.Path is null ? 0 : StringComparer.OrdinalIgnoreCase.GetHashCode(obj.Path);
321322
}
322323
}
323324
}

src/wix/test/WixToolsetTest.CoreIntegration/HarvestFilesFixture.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,33 @@ public void CanHarvestFilesInDirectory()
142142
Build("Directory.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected));
143143
}
144144

145+
[Fact]
146+
public void CanHarvestFilesWithCaseInsensitiveExcludeSubdirectory()
147+
{
148+
var expected = new[]
149+
{
150+
@"flsYgiwrDUkZnBEK6iUMkxxaJlD8yQ=PFiles\MsiPackage\test1.txt",
151+
@"flslrDWblm4pE.4i4jR58_XyYMmR8I=PFiles\MsiPackage\files1_sub1\files1_sub2\test120.txt",
152+
@"flsj.cb0sFWqIPHPFSKJSEEaPDuAQ4=PFiles\MsiPackage\test2.txt",
153+
};
154+
155+
Build("CaseInsensitiveExcludeSubdir.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected));
156+
}
157+
158+
[Fact]
159+
public void CanHarvestFilesWithCaseInsensitiveIncludeExclude()
160+
{
161+
var expected = new[]
162+
{
163+
@"flsaFu0CvigRX6Psea0ic6ZWevzLmI=PFiles\MsiPackage\test3.txt",
164+
@"flsJBy_HKCNejalUyud4HisGqhd72E=PFiles\MsiPackage\test4.txt",
165+
@"fls05.yw49T0FVAq3Wvq2ihNp3KWfI=PFiles\MsiPackage\files2_sub2\test20.txt",
166+
@"flsf0falU_gCTJjtbSCNiFpJQ1d8EM=PFiles\MsiPackage\files2_sub2\test21.txt",
167+
};
168+
169+
Build("CaseInsensitiveIncludeExclude.wxs", (msiPath, _) => AssertFileIdsAndTargetPaths(msiPath, expected));
170+
}
171+
145172
[Fact]
146173
public void CanHarvestFilesInDirectoryRef()
147174
{
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2+
<Package Id="WixTest.MsiPackage" Name="MsiPackage" Version="1.0.0.0" Manufacturer="Example Corporation">
3+
<StandardDirectory Id="ProgramFilesFolder">
4+
<Directory Id="INSTALLFOLDER" Name="MsiPackage" FileSource="$(sys.SOURCEFILEDIR)">
5+
<Files Include="files1\**">
6+
<Exclude Files="FILES1\FILES1_SUB1\*" />
7+
</Files>
8+
</Directory>
9+
</StandardDirectory>
10+
</Package>
11+
</Wix>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
2+
<Package Id="WixTest.MsiPackage" Name="MsiPackage" Version="1.0.0.0" Manufacturer="Example Corporation">
3+
<StandardDirectory Id="ProgramFilesFolder">
4+
<Directory Id="INSTALLFOLDER" Name="MsiPackage" FileSource="$(sys.SOURCEFILEDIR)">
5+
<Files Include="FILES2\**\*.TXT">
6+
<Exclude Files="files2\NOTATEST.txt" />
7+
</Files>
8+
</Directory>
9+
</StandardDirectory>
10+
</Package>
11+
</Wix>

0 commit comments

Comments
 (0)