Skip to content

Commit

Permalink
Merge pull request #1416 from rainersigwald/sdk-imports-virtual-elements
Browse files Browse the repository at this point in the history
Do not reveal implicit elements through RawXml
  • Loading branch information
rainersigwald authored Dec 1, 2016
2 parents 6490226 + 1d821a8 commit 36be242
Showing 1 changed file with 34 additions and 13 deletions.
47 changes: 34 additions & 13 deletions src/XMakeBuildEngine/Construction/ProjectRootElement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,11 @@ public class ProjectRootElement : ProjectElementContainer
/// </summary>
private BuildEventContext _buildEventContext;

/// <summary>
/// Xpath expression that will find any element with the implicit attribute
/// </summary>
private static readonly string ImplicitAttributeXpath = $"//*[@{XMakeAttributes.@implicit}]";

/// <summary>
/// Initialize a ProjectRootElement instance from a XmlReader.
/// May throw InvalidProjectFileException.
Expand Down Expand Up @@ -705,8 +710,10 @@ public string RawXml
{
using (ProjectWriter projectWriter = new ProjectWriter(stringWriter))
{
projectWriter.Initialize(XmlDocument);
XmlDocument.Save(projectWriter);
var xmlWithNoImplicits = RemoveImplicits();

projectWriter.Initialize(xmlWithNoImplicits);
xmlWithNoImplicits.Save(projectWriter);
}

return stringWriter.ToString();
Expand Down Expand Up @@ -1745,15 +1752,7 @@ public void Save(Encoding saveEncoding)
{
using (ProjectWriter projectWriter = new ProjectWriter(_projectFileLocation.File, saveEncoding))
{
var xmlWithNoImplicits = (XmlDocument)XmlDocument.CloneNode(deep: true);

var implicitElements =
xmlWithNoImplicits.SelectNodes($"//*[@{XMakeAttributes.@implicit}]");

foreach (XmlNode implicitElement in implicitElements)
{
implicitElement.ParentNode.RemoveChild(implicitElement);
}
var xmlWithNoImplicits = RemoveImplicits();

projectWriter.Initialize(xmlWithNoImplicits);
xmlWithNoImplicits.Save(projectWriter);
Expand Down Expand Up @@ -1785,6 +1784,26 @@ public void Save(Encoding saveEncoding)
#endif
}

private XmlDocument RemoveImplicits()
{
if (XmlDocument.SelectSingleNode(ImplicitAttributeXpath) == null)
{
return XmlDocument;
}

var xmlWithNoImplicits = (XmlDocument) XmlDocument.CloneNode(deep: true);

var implicitElements =
xmlWithNoImplicits.SelectNodes(ImplicitAttributeXpath);

foreach (XmlNode implicitElement in implicitElements)
{
implicitElement.ParentNode.RemoveChild(implicitElement);
}

return xmlWithNoImplicits;
}

/// <summary>
/// Save the project to the file system, if dirty or the path is different.
/// Creates any necessary directories.
Expand Down Expand Up @@ -1818,8 +1837,10 @@ public void Save(TextWriter writer)
{
using (ProjectWriter projectWriter = new ProjectWriter(writer))
{
projectWriter.Initialize(XmlDocument);
XmlDocument.Save(projectWriter);
var xmlWithNoImplicits = RemoveImplicits();

projectWriter.Initialize(xmlWithNoImplicits);
xmlWithNoImplicits.Save(projectWriter);
}

_versionOnDisk = Version;
Expand Down

0 comments on commit 36be242

Please sign in to comment.