Simpler implementation from PR feedback.
authorJeremy Koritzinsky <jekoritz@microsoft.com>
Tue, 25 Sep 2018 23:45:04 +0000 (16:45 -0700)
committerJeremy Koritzinsky <jekoritz@microsoft.com>
Tue, 25 Sep 2018 23:54:06 +0000 (16:54 -0700)
src/System.Private.CoreLib/shared/System/Runtime/InteropServices/SafeBuffer.cs

index 66b500a..74edae3 100644 (file)
@@ -110,19 +110,13 @@ namespace System.Runtime.InteropServices
         [CLSCompliant(false)]
         public void Initialize(uint numElements, uint sizeOfEachElement)
         {
-            if (sizeOfEachElement == 0)
+            try
             {
-                _numBytes = (UIntPtr)0;
+                _numBytes = checked((UIntPtr)((ulong)numElements * sizeOfEachElement));
             }
-            else
+            catch (OverflowException)
             {
-                if (IntPtr.Size == 4 && numElements > uint.MaxValue / sizeOfEachElement)
-                    throw new ArgumentOutOfRangeException("numBytes", SR.ArgumentOutOfRange_AddressSpace);
-
-                if (numElements >= (ulong)Uninitialized / sizeOfEachElement)
-                    throw new ArgumentOutOfRangeException(nameof(numElements), SR.ArgumentOutOfRange_UIntPtrMax);
-
-                _numBytes = checked((UIntPtr)(numElements * sizeOfEachElement)); 
+                throw new ArgumentOutOfRangeException("numBytes", SR.ArgumentOutOfRange_AddressSpace);
             }
         }