From 61902c38d48210929ab05fa44e95e18459c93e4e Mon Sep 17 00:00:00 2001 From: Bill Long Date: Wed, 31 May 2023 00:42:21 -0500 Subject: [PATCH] Handle exceptions when generating Xml --- .../Models/DisplayEventModel.cs | 68 ++++++++++++------- 1 file changed, 45 insertions(+), 23 deletions(-) diff --git a/src/EventLogExpert.Library/Models/DisplayEventModel.cs b/src/EventLogExpert.Library/Models/DisplayEventModel.cs index 2bdcb7a3..0c995b4b 100644 --- a/src/EventLogExpert.Library/Models/DisplayEventModel.cs +++ b/src/EventLogExpert.Library/Models/DisplayEventModel.cs @@ -42,43 +42,65 @@ public string Xml $" \r\n" + $" \r\n"); + var templateSuccessfullyParsed = false; + if (!string.IsNullOrEmpty(Template)) { - var propertyNames = new List(); - 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(); + 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($" {val.Length}\r\n"); - sb.Append($" {Convert.ToHexString(val)}\r\n"); - i++; - } - else + for (var i = 0; i < Properties.Count; i++) { - sb.Append($" {Properties[i].Value}\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($" {val.Length}\r\n"); + templateBuilder.Append($" {Convert.ToHexString(val)}\r\n"); + i++; + } + else + { + templateBuilder.Append($" {Properties[i].Value}\r\n"); + } } + + sb.Append(templateBuilder.ToString()); + templateSuccessfullyParsed = true; + } + catch + { + // No tracer available here } } - else + + if (!templateSuccessfullyParsed) { foreach (var p in Properties) { - sb.Append($" {p.Value}\r\n"); + if (p.Value is byte[] bytes) + { + sb.Append($" {Convert.ToHexString(bytes)}\r\n"); + } + else + { + sb.Append($" {p.Value}\r\n"); + } } }