2008-06-18 Robert Jordan <robertj@gmx.net>
authorRobert Jordan <robertj@gmx.net>
Thu, 19 Jun 2008 10:38:23 +0000 (10:38 -0000)
committerRobert Jordan <robertj@gmx.net>
Thu, 19 Jun 2008 10:38:23 +0000 (10:38 -0000)
* TcpMessageIO.cs: Handle zero length streams. Fixes #398783.

svn path=/trunk/mcs/; revision=106194

mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Tcp/ChangeLog
mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Tcp/TcpMessageIO.cs

index f28d7f37b306f1e21b4cc43e699c41124431a0aa..010ace7dc449f545b0755fb73daed3b217332e20 100644 (file)
@@ -1,3 +1,7 @@
+2008-06-18  Robert Jordan  <robertj@gmx.net>
+
+       * TcpMessageIO.cs: Handle zero length streams. Fixes #398783.
+
 2008-01-25  Zoltan Varga  <vargaz@gmail.com>
 
        * TcpChannel.cs (Init): Handle properties == null.
index 58c6b079ec481f45cf8400af557057d5406ab8cf..4c57d2129fb7969e1f257e5b123525078ff5efff 100644 (file)
@@ -137,6 +137,9 @@ namespace System.Runtime.Remoting.Channels.Tcp
                        // Writes the message headers
                        SendHeaders (networkStream, requestHeaders, buffer);
 
+                       if (data.Length == 0)
+                               return;
+
                        // Writes the stream
                        if (data is MemoryStream)
                        {
@@ -235,10 +238,13 @@ namespace System.Runtime.Remoting.Channels.Tcp
                        // Reads the headers
                        headers = ReceiveHeaders (networkStream, buffer);
 
-                       byte[] resultBuffer = new byte[byteCount];
-                       StreamRead (networkStream, resultBuffer, byteCount);
-
-                       return new MemoryStream (resultBuffer);
+                       if (byteCount > 0) {
+                               byte[] resultBuffer = new byte[byteCount];
+                               StreamRead (networkStream, resultBuffer, byteCount);
+                               return new MemoryStream (resultBuffer);
+                       } else {
+                               return new MemoryStream ();
+                       }
                }               
 
                private static void SendString (Stream networkStream, string str, byte[] buffer)