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:
authorMarek Safar <marek.safar@gmail.com>2015-05-20 10:55:49 +0300
committerMarek Safar <marek.safar@gmail.com>2015-05-20 10:55:49 +0300
commited1d3ec5260b613849b9af27c9dbcb6566c1637c (patch)
treea9c32f30a1c4d45801c7da12e141b98dc0f4bd04
parent11b58305d0c62dbd81e48c0c8c83aae4c093c70f (diff)
[corlib] BinaryReader with Unicode encoding needs to read bytes in a pair. Fixes #30171mono-4.0.1.44
-rw-r--r--mcs/class/corlib/System.IO/BinaryReader.cs7
-rw-r--r--mcs/class/corlib/Test/System.IO/BinaryReaderTest.cs14
2 files changed, 21 insertions, 0 deletions
diff --git a/mcs/class/corlib/System.IO/BinaryReader.cs b/mcs/class/corlib/System.IO/BinaryReader.cs
index 73235c9c23d..bbcd8174e71 100644
--- a/mcs/class/corlib/System.IO/BinaryReader.cs
+++ b/mcs/class/corlib/System.IO/BinaryReader.cs
@@ -253,6 +253,13 @@ namespace System.IO {
m_buffer [pos ++] = (byte)read_byte;
bytes_read ++;
+ if (m_encoding is UnicodeEncoding) {
+ CheckBuffer (pos + 1);
+ read_byte = m_stream.ReadByte();
+ if (read_byte != -1) {
+ m_buffer [pos++] = (byte)read_byte;
+ }
+ }
int n = m_encoding.GetChars (m_buffer, 0, pos, buffer, index + chars_read);
if (n > 0)
diff --git a/mcs/class/corlib/Test/System.IO/BinaryReaderTest.cs b/mcs/class/corlib/Test/System.IO/BinaryReaderTest.cs
index 852d69089b3..ca4e3daafdd 100644
--- a/mcs/class/corlib/Test/System.IO/BinaryReaderTest.cs
+++ b/mcs/class/corlib/Test/System.IO/BinaryReaderTest.cs
@@ -274,6 +274,20 @@ namespace MonoTests.System.IO
}
}
+ [Test]
+ public void TestReadUnicode ()
+ {
+ char testChar1 = 'H';
+ using (var stream = new MemoryStream())
+ using (var writer = new BinaryWriter(stream, Encoding.Unicode, true))
+ using (var reader = new BinaryReader(stream, Encoding.Unicode))
+ {
+ writer.Write(testChar1);
+ stream.Position = 0;
+ Assert.AreEqual ('H', reader.ReadChar ());
+ }
+ }
+
//-TODO: (TestRead[Type]*) Verify the ReadBoolean, ReadByte ....
// ReadBoolean, ReadByte, ReadChar, ReadInt32 Done