diff --git a/src/libraries/System.Private.CoreLib/src/Resources/Strings.resx b/src/libraries/System.Private.CoreLib/src/Resources/Strings.resx
index fd58d7afae6074..f0dd0e2b74d1cc 100644
--- a/src/libraries/System.Private.CoreLib/src/Resources/Strings.resx
+++ b/src/libraries/System.Private.CoreLib/src/Resources/Strings.resx
@@ -1941,7 +1941,7 @@
startIndex cannot be larger than length of string.
- Stream length must be non-negative and less than the maximum array length (0x7FFFFFC7) - origin.
+ Stream length must be non-negative and less than the maximum array length {0} - origin.
The length of the buffer must be less than the maximum UIntPtr value for your platform.
diff --git a/src/libraries/System.Private.CoreLib/src/System/IO/MemoryStream.cs b/src/libraries/System.Private.CoreLib/src/System/IO/MemoryStream.cs
index 05480a61c72b5c..53f717dfe80a4e 100644
--- a/src/libraries/System.Private.CoreLib/src/System/IO/MemoryStream.cs
+++ b/src/libraries/System.Private.CoreLib/src/System/IO/MemoryStream.cs
@@ -44,6 +44,7 @@ public MemoryStream()
public MemoryStream(int capacity)
{
ArgumentOutOfRangeException.ThrowIfNegative(capacity);
+ ArgumentOutOfRangeException.ThrowIfGreaterThan(capacity, MemStreamMaxLength);
_buffer = capacity != 0 ? new byte[capacity] : Array.Empty();
_capacity = capacity;
@@ -311,7 +312,7 @@ public override long Position
EnsureNotClosed();
if (value > MemStreamMaxLength - _origin)
- throw new ArgumentOutOfRangeException(nameof(value), SR.ArgumentOutOfRange_StreamLength);
+ throw new ArgumentOutOfRangeException(nameof(value), SR.Format(SR.ArgumentOutOfRange_StreamLength, Array.MaxLength));
_position = _origin + (int)value;
}
}
@@ -524,7 +525,7 @@ public override long Seek(long offset, SeekOrigin loc)
private long SeekCore(long offset, int loc)
{
if (offset > MemStreamMaxLength - loc)
- throw new ArgumentOutOfRangeException(nameof(offset), SR.ArgumentOutOfRange_StreamLength);
+ throw new ArgumentOutOfRangeException(nameof(offset), SR.Format(SR.ArgumentOutOfRange_StreamLength, Array.MaxLength));
int tempPosition = unchecked(loc + (int)offset);
if (unchecked(loc + offset) < _origin || tempPosition < _origin)
throw new IOException(SR.IO_SeekBeforeBegin);
@@ -547,14 +548,14 @@ private long SeekCore(long offset, int loc)
public override void SetLength(long value)
{
if (value < 0 || value > MemStreamMaxLength)
- throw new ArgumentOutOfRangeException(nameof(value), SR.ArgumentOutOfRange_StreamLength);
+ throw new ArgumentOutOfRangeException(nameof(value), SR.Format(SR.ArgumentOutOfRange_StreamLength, Array.MaxLength));
EnsureWriteable();
// Origin wasn't publicly exposed above.
- Debug.Assert(MemStreamMaxLength == 0x7FFFFFC7); // Check parameter validation logic in this method if this fails.
+ Debug.Assert(MemStreamMaxLength == Array.MaxLength); // Check parameter validation logic in this method if this fails.
if (value > (MemStreamMaxLength - _origin))
- throw new ArgumentOutOfRangeException(nameof(value), SR.ArgumentOutOfRange_StreamLength);
+ throw new ArgumentOutOfRangeException(nameof(value), SR.Format(SR.ArgumentOutOfRange_StreamLength, Array.MaxLength));
int newLength = _origin + (int)value;
bool allocatedNewArray = EnsureCapacity(newLength);
diff --git a/src/libraries/System.Runtime/tests/System.IO.Tests/MemoryStream/MemoryStream.ConstructorTests.cs b/src/libraries/System.Runtime/tests/System.IO.Tests/MemoryStream/MemoryStream.ConstructorTests.cs
index c987446b102ef0..6df2689e117704 100644
--- a/src/libraries/System.Runtime/tests/System.IO.Tests/MemoryStream/MemoryStream.ConstructorTests.cs
+++ b/src/libraries/System.Runtime/tests/System.IO.Tests/MemoryStream/MemoryStream.ConstructorTests.cs
@@ -36,7 +36,7 @@ public static void MemoryStream_Ctor_InvalidCapacities()
Assert.Throws(() => new MemoryStream(-1));
if (PlatformDetection.IsNotIntMaxValueArrayIndexSupported)
{
- Assert.Throws(() => new MemoryStream(int.MaxValue));
+ Assert.Throws(() => new MemoryStream(int.MaxValue));
}
}
}