Some argument check in TextMessageEncoder.
authorAtsushi Eno <atsushi@ximian.com>
Fri, 15 Apr 2011 14:48:31 +0000 (23:48 +0900)
committerAtsushi Eno <atsushi@ximian.com>
Fri, 15 Apr 2011 14:48:31 +0000 (23:48 +0900)
mcs/class/System.ServiceModel/System.ServiceModel.Channels/TextMessageEncoder.cs
mcs/class/System.ServiceModel/Test/System.ServiceModel.Channels/TextMessageEncodingBindingElementTest.cs

index 822288a464da9ca4bb418763a6a726921311a721..3f1a1d736257e9039d2b2df7cc43889fb8d12509 100644 (file)
@@ -64,6 +64,8 @@ namespace System.ServiceModel.Channels
                public override Message ReadMessage (ArraySegment<byte> buffer,
                        BufferManager bufferManager, string contentType)
                {
+                       if (bufferManager == null)
+                               throw new ArgumentNullException ("bufferManager");
                        return Message.CreateMessage (
                                XmlDictionaryReader.CreateDictionaryReader (
                                        XmlReader.Create (new StreamReader (
@@ -75,10 +77,11 @@ namespace System.ServiceModel.Channels
                                version);
                }
 
-               [MonoTODO]
                public override Message ReadMessage (Stream stream,
                        int maxSizeOfHeaders, string contentType)
                {
+                       if (stream == null)
+                               throw new ArgumentNullException ("stream");
                        return Message.CreateMessage (
                                XmlDictionaryReader.CreateDictionaryReader (
                                        XmlReader.Create (new StreamReader (stream, encoding))),
index 054c2be606090a15dcf13a782640eb02c5ed3285..a4f59360ea1d467a3c07cbc70595b298c2891680 100644 (file)
@@ -31,6 +31,7 @@ using System.ServiceModel;
 using System.ServiceModel.Channels;
 using System.ServiceModel.Description;
 using System.Text;
+using System.Xml;
 using NUnit.Framework;
 
 using Element = System.ServiceModel.Channels.TextMessageEncodingBindingElement;
@@ -112,5 +113,29 @@ namespace MonoTests.System.ServiceModel.Channels
                        Assert.IsFalse (enc.IsContentTypeSupported ("text/xml"), "#2");
                        Assert.IsTrue (enc.IsContentTypeSupported ("application/soap+xml"), "#3");
                }
+               
+               [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
+               public void ReadNullStream ()
+               {
+                       var enc = new TextMessageEncodingBindingElement ().CreateMessageEncoderFactory ().Encoder;
+                       enc.ReadMessage (null, 10, "text/xml");
+               }
+               
+               [Test]
+               [ExpectedException (typeof (ArgumentNullException))]
+               public void ReadNullBufferManager ()
+               {
+                       var enc = new TextMessageEncodingBindingElement ().CreateMessageEncoderFactory ().Encoder;
+                       enc.ReadMessage (new ArraySegment<byte> (new byte [0]), null, "text/xml");
+               }
+               
+               [Test]
+               [ExpectedException (typeof (XmlException))] // (document is expected)
+               public void ReadEmptyBuffer ()
+               {
+                       var enc = new TextMessageEncodingBindingElement ().CreateMessageEncoderFactory ().Encoder;
+                       enc.ReadMessage (new ArraySegment<byte> (new byte [0]), BufferManager.CreateBufferManager (1000, 1000), "text/xml");
+               }
        }
 }