Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mcs/class/referencesource/mscorlib/system/io/binaryreader.cs21
1 files changed, 17 insertions, 4 deletions
diff --git a/mcs/class/referencesource/mscorlib/system/io/binaryreader.cs b/mcs/class/referencesource/mscorlib/system/io/binaryreader.cs
index 9f1b89de5d5..ecaac6e7e78 100644
--- a/mcs/class/referencesource/mscorlib/system/io/binaryreader.cs
+++ b/mcs/class/referencesource/mscorlib/system/io/binaryreader.cs
@@ -521,14 +521,27 @@ namespace System.IO {
#if MONO
public virtual int Read(Span<char> buffer)
{
- char[] bufferBytes = buffer.ToArray();
- return Read(bufferBytes, 0, bufferBytes.Length);
+ char[] bufferBytes = System.Buffers.ArrayPool<char>.Shared.Rent(buffer.Length);
+ try
+ {
+ int num = InternalReadChars(bufferBytes, 0, buffer.Length);
+ if ((uint)num > (uint)buffer.Length)
+ {
+ throw new IOException(SR.IO_StreamTooLong);
+ }
+ new ReadOnlySpan<char>(bufferBytes, 0, num).CopyTo(buffer);
+ return num;
+ }
+ finally
+ {
+ System.Buffers.ArrayPool<char>.Shared.Return(bufferBytes);
+ }
}
public virtual int Read(Span<byte> buffer)
{
- byte[] bufferBytes = buffer.ToArray();
- return Read(bufferBytes, 0, bufferBytes.Length);
+ if (m_stream==null) __Error.FileNotOpen();
+ return m_stream.Read(buffer);
}
#endif