Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 21 additions & 4 deletions src/Tasks.UnitTests/GenerateBindingRedirects_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,22 @@ public void AppConfigInvalidIfDependentAssemblyNodeIsEmpty()
redirectResults.Engine.AssertLogContains("MSB3835");
}

[Fact]
public void AppConfigWhenFilePlacedInLocationWithGB18030Characters()
{
using (TestEnvironment env = TestEnvironment.Create())
{
TransientTestFolder rootTestFolder = _env.CreateFolder();
TransientTestFolder testFolder = _env.CreateFolder(Path.Combine(rootTestFolder.Path, "𬴂龨苘爫麤υ㏑䡫3"));
string appConfigContents = WriteAppConfigRuntimeSection(string.Empty, testFolder);
string outputAppConfigFile = _env.ExpectFile(".config").Path;

TaskItemMock redirect = new TaskItemMock("System, Version=10.0.0.0, Culture=Neutral, PublicKeyToken='b77a5c561934e089'", "40.0.0.0");

_ = Should.NotThrow(() => GenerateBindingRedirects(appConfigContents, outputAppConfigFile, redirect));
}
}

[Fact]
public void AppConfigFileNotSavedWhenIdentical()
{
Expand Down Expand Up @@ -306,12 +322,11 @@ private BindingRedirectsExecutionResult GenerateBindingRedirects(string appConfi
GenerateBindingRedirects bindingRedirects = new GenerateBindingRedirects
{
BuildEngine = engine,
SuggestedRedirects = suggestedRedirects ?? System.Array.Empty<ITaskItem>(),
SuggestedRedirects = suggestedRedirects ?? Array.Empty<ITaskItem>(),
AppConfigFile = new TaskItem(appConfigFile),
OutputAppConfigFile = new TaskItem(outputAppConfig)
};


bool executionResult = bindingRedirects.Execute();

return new BindingRedirectsExecutionResult
Expand All @@ -324,7 +339,9 @@ private BindingRedirectsExecutionResult GenerateBindingRedirects(string appConfi
};
}

private string WriteAppConfigRuntimeSection(string runtimeSection)
private string WriteAppConfigRuntimeSection(
string runtimeSection,
TransientTestFolder transientTestFolder = null)
{
string formatString =
@"<configuration>
Expand All @@ -334,7 +351,7 @@ private string WriteAppConfigRuntimeSection(string runtimeSection)
</configuration>";
string appConfigContents = string.Format(formatString, runtimeSection);

string appConfigFile = _env.CreateFile(".config").Path;
string appConfigFile = _env.CreateFile(transientTestFolder ?? new TransientTestFolder(), ".config").Path;
File.WriteAllText(appConfigFile, appConfigContents);
return appConfigFile;
}
Expand Down
8 changes: 7 additions & 1 deletion src/Tasks/AssemblyDependency/GenerateBindingRedirects.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using Microsoft.Build.Shared;
using Microsoft.Build.Shared.FileSystem;
using System.IO;
using System.Xml;

#nullable disable

Expand Down Expand Up @@ -335,7 +336,12 @@ private XDocument LoadAppConfig(ITaskItem appConfigItem)
}
else
{
document = XDocument.Load(appConfigItem.ItemSpec);
var xrs = new XmlReaderSettings { DtdProcessing = DtdProcessing.Ignore, CloseInput = true };
using (XmlReader xr = XmlReader.Create(File.OpenRead(appConfigItem.ItemSpec), xrs))
{
document = XDocument.Load(xr);
}

if (document.Root == null || document.Root.Name != "configuration")
{
Log.LogErrorWithCodeFromResources("GenerateBindingRedirects.MissingConfigurationNode");
Expand Down