diff --git a/src/TraceEvent/DynamicTraceEventParser.cs b/src/TraceEvent/DynamicTraceEventParser.cs index 1f80e3cf1..34a60e7a7 100644 --- a/src/TraceEvent/DynamicTraceEventParser.cs +++ b/src/TraceEvent/DynamicTraceEventParser.cs @@ -529,7 +529,15 @@ private object GetPayloadValueAt(ref PayloadFetch payloadFetch, int offset, int for (int i = 0; i < arrayCount; i++) { object value = GetPayloadValueAt(ref arrayInfo.Element, offset, payloadLength); - if (value.GetType() != elementType) + // Some events have metadata of the form: + // input=Array of ulong + // output=Array of IntPtr + // This is common for bitmasks. To address this, we special case it here. + if (elementType == typeof(IntPtr) && value is ulong uintVal) + { + value = new IntPtr(unchecked((long)uintVal)); + } + else if (value.GetType() != elementType) { value = ((IConvertible)value).ToType(elementType, null); }