Skip to content

Commit

Permalink
Merge pull request #142 from microsoft/bilong-xmlbinary
Browse files Browse the repository at this point in the history
Handle exceptions when generating Xml
  • Loading branch information
jschick04 authored May 31, 2023
2 parents 7fad93f + 61902c3 commit 9b095fa
Showing 1 changed file with 45 additions and 23 deletions.
68 changes: 45 additions & 23 deletions src/EventLogExpert.Library/Models/DisplayEventModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,43 +42,65 @@ public string Xml
$" </System>\r\n" +
$" <EventData>\r\n");

var templateSuccessfullyParsed = false;

if (!string.IsNullOrEmpty(Template))
{
var propertyNames = new List<string>();
var index = -1;
while (-1 < (index = Template.IndexOf("name=", index + 1)))
try
{
var nameStart = index + 6;
var nameEnd = Template.IndexOf('"', nameStart);
var name = Template.Substring(nameStart, nameEnd - nameStart);
propertyNames.Add(name);
}
var templateBuilder = new StringBuilder();

for (var i = 0; i < Properties.Count; i++)
{
if (i >= propertyNames.Count)
var propertyNames = new List<string>();
var index = -1;
while (-1 < (index = Template.IndexOf("name=", index + 1)))
{
break;
var nameStart = index + 6;
var nameEnd = Template.IndexOf('"', nameStart);
var name = Template.Substring(nameStart, nameEnd - nameStart);
propertyNames.Add(name);
}

if (propertyNames[i] == "__binLength" && propertyNames[i + 1] == "BinaryData" && Properties[i].Value is byte[] val)
{
// Handle event 7036 from Service Control Manager binary data
sb.Append($" <Data Name=\"{propertyNames[i]}\">{val.Length}</Data>\r\n");
sb.Append($" <Data Name=\"{propertyNames[i + 1]}\">{Convert.ToHexString(val)}</Data>\r\n");
i++;
}
else
for (var i = 0; i < Properties.Count; i++)
{
sb.Append($" <Data Name=\"{propertyNames[i]}\">{Properties[i].Value}</Data>\r\n");
if (i >= propertyNames.Count)
{
break;
}

if (propertyNames[i] == "__binLength" && propertyNames[i + 1] == "BinaryData" && Properties[i].Value is byte[] val)
{
// Handle event 7036 from Service Control Manager binary data
templateBuilder.Append($" <Data Name=\"{propertyNames[i]}\">{val.Length}</Data>\r\n");
templateBuilder.Append($" <Data Name=\"{propertyNames[i + 1]}\">{Convert.ToHexString(val)}</Data>\r\n");
i++;
}
else
{
templateBuilder.Append($" <Data Name=\"{propertyNames[i]}\">{Properties[i].Value}</Data>\r\n");
}
}

sb.Append(templateBuilder.ToString());
templateSuccessfullyParsed = true;
}
catch
{
// No tracer available here
}
}
else

if (!templateSuccessfullyParsed)
{
foreach (var p in Properties)
{
sb.Append($" <Data>{p.Value}</Data>\r\n");
if (p.Value is byte[] bytes)
{
sb.Append($" <Data>{Convert.ToHexString(bytes)}</Data>\r\n");
}
else
{
sb.Append($" <Data>{p.Value}</Data>\r\n");
}
}
}

Expand Down

0 comments on commit 9b095fa

Please sign in to comment.