Restoring the fix to WriteEvent with null/empty arrays that was over written by my...
authorDavid Mason <davmason@microsoft.com>
Tue, 24 Nov 2015 19:26:50 +0000 (11:26 -0800)
committerDavid Mason <davmason@microsoft.com>
Tue, 24 Nov 2015 19:26:50 +0000 (11:26 -0800)
src/mscorlib/src/System/Diagnostics/Eventing/EventSource.cs

index 793a7f4..2eb7c38 100644 (file)
@@ -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