From: David Mason Date: Tue, 24 Nov 2015 19:26:50 +0000 (-0800) Subject: Restoring the fix to WriteEvent with null/empty arrays that was over written by my... X-Git-Tag: accepted/tizen/base/20180629.140029~6100^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6cc80f8a0bfd51afd2e9d4c40d143dcdc2058cd4;p=platform%2Fupstream%2Fcoreclr.git Restoring the fix to WriteEvent with null/empty arrays that was over written by my port. --- diff --git a/src/mscorlib/src/System/Diagnostics/Eventing/EventSource.cs b/src/mscorlib/src/System/Diagnostics/Eventing/EventSource.cs index 793a7f4..2eb7c38 100644 --- a/src/mscorlib/src/System/Diagnostics/Eventing/EventSource.cs +++ b/src/mscorlib/src/System/Diagnostics/Eventing/EventSource.cs @@ -1048,48 +1048,70 @@ namespace System.Diagnostics.Tracing } } } - - [SecuritySafeCritical] - [SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "This does not need to be correct when racing with other threads")] - protected unsafe void WriteEvent(int eventId, byte[] arg1) - { - if (m_eventSourceEnabled) - { - if (arg1 == null) arg1 = new byte[0]; - int blobSize = arg1.Length; - fixed (byte* blob = &arg1[0]) - { - EventSource.EventData* descrs = stackalloc EventSource.EventData[2]; - descrs[0].DataPointer = (IntPtr)(&blobSize); - descrs[0].Size = 4; - descrs[1].DataPointer = (IntPtr)blob; - descrs[1].Size = blobSize; - WriteEventCore(eventId, 2, descrs); - } - } - } - - [SecuritySafeCritical] - [SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "This does not need to be correct when racing with other threads")] - protected unsafe void WriteEvent(int eventId, long arg1, byte[] arg2) - { - if (m_eventSourceEnabled) - { - if (arg2 == null) arg2 = new byte[0]; - int blobSize = arg2.Length; - fixed (byte* blob = &arg2[0]) - { - EventSource.EventData* descrs = stackalloc EventSource.EventData[3]; - descrs[0].DataPointer = (IntPtr)(&arg1); - descrs[0].Size = 8; - descrs[1].DataPointer = (IntPtr)(&blobSize); - descrs[1].Size = 4; - descrs[2].DataPointer = (IntPtr)blob; - descrs[2].Size = blobSize; - WriteEventCore(eventId, 3, descrs); - } - } - } + + [SecuritySafeCritical] + [SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "This does not need to be correct when racing with other threads")] + protected unsafe void WriteEvent(int eventId, byte[] arg1) + { + if (m_eventSourceEnabled) + { + EventSource.EventData* descrs = stackalloc EventSource.EventData[2]; + if (arg1 == null || arg1.Length == 0) + { + int blobSize = 0; + descrs[0].DataPointer = (IntPtr)(&blobSize); + descrs[0].Size = 4; + descrs[1].DataPointer = (IntPtr)(&blobSize); // valid address instead of empty content + descrs[1].Size = 0; + WriteEventCore(eventId, 2, descrs); + } + else + { + int blobSize = arg1.Length; + fixed (byte* blob = &arg1[0]) + { + descrs[0].DataPointer = (IntPtr)(&blobSize); + descrs[0].Size = 4; + descrs[1].DataPointer = (IntPtr)blob; + descrs[1].Size = blobSize; + WriteEventCore(eventId, 2, descrs); + } + } + } + } + + [SecuritySafeCritical] + [SuppressMessage("Microsoft.Concurrency", "CA8001", Justification = "This does not need to be correct when racing with other threads")] + protected unsafe void WriteEvent(int eventId, long arg1, byte[] arg2) + { + if (m_eventSourceEnabled) + { + EventSource.EventData* descrs = stackalloc EventSource.EventData[3]; + descrs[0].DataPointer = (IntPtr)(&arg1); + descrs[0].Size = 8; + if (arg2 == null || arg2.Length == 0) + { + int blobSize = 0; + descrs[1].DataPointer = (IntPtr)(&blobSize); + descrs[1].Size = 4; + descrs[2].DataPointer = (IntPtr)(&blobSize); // valid address instead of empty contents + descrs[2].Size = 0; + WriteEventCore(eventId, 3, descrs); + } + else + { + int blobSize = arg2.Length; + fixed (byte* blob = &arg2[0]) + { + descrs[1].DataPointer = (IntPtr)(&blobSize); + descrs[1].Size = 4; + descrs[2].DataPointer = (IntPtr)blob; + descrs[2].Size = blobSize; + WriteEventCore(eventId, 3, descrs); + } + } + } + } #pragma warning restore 1591