2005-02-10 Lluis Sanchez Gual <lluis@novell.com>
authorLluis Sanchez <lluis@novell.com>
Thu, 10 Feb 2005 09:54:22 +0000 (09:54 -0000)
committerLluis Sanchez <lluis@novell.com>
Thu, 10 Feb 2005 09:54:22 +0000 (09:54 -0000)
* SoapReader.cs: Don't crash if the xml has more fields than expected.

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

mcs/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/ChangeLog
mcs/class/System.Runtime.Serialization.Formatters.Soap/System.Runtime.Serialization.Formatters.Soap/SoapReader.cs

index 198c69e547edb0e07d70edbb35ba58f62f431dad..20b8aa2537954a85006d1c328e0d68edbd4b7d43 100644 (file)
@@ -1,3 +1,7 @@
+2005-02-10  Lluis Sanchez Gual  <lluis@novell.com>
+
+       * SoapReader.cs: Don't crash if the xml has more fields than expected.
+
 2004-09-13  Lluis Sanchez Gual <lluis@ximian.com>
 
        * SoapReader.cs: Handle SOAP invocation without arguments in SoapReader.
index ee345899019a836eff597544315c856cc6cf3b2d..13c623d06f9d128c491a5268ebcbd29a8fc03677 100755 (executable)
@@ -524,13 +524,23 @@ namespace System.Runtime.Serialization.Formatters.Soap {
 \r
                        object[] data = new object[tm.MemberInfos.Length];\r
                        xmlReader.Read();\r
-                       for(int i = 0; i < tm.MemberInfos.Length; i++)\r
+                       xmlReader.MoveToContent ();\r
+                       while (xmlReader.NodeType != XmlNodeType.EndElement)\r
                        {\r
+                               if (xmlReader.NodeType != XmlNodeType.Element) {\r
+                                       xmlReader.Skip ();\r
+                                       continue;\r
+                               }\r
+                               \r
                                object fieldObject;\r
                                long fieldId, fieldHref;\r
-                               int index = (int) tm.Indices[xmlReader.LocalName];\r
+\r
+                               object indexob = tm.Indices [xmlReader.LocalName];\r
+                               if (indexob == null)\r
+                                       throw new SerializationException ("Field \"" + xmlReader.LocalName + "\" not found in class " + currentType.FullName);\r
+                               \r
+                               int index = (int) indexob;\r
                                FieldInfo fieldInfo = (tm.MemberInfos[index]) as FieldInfo;\r
-                               if(fieldInfo == null) continue;\r
 \r
                                fieldObject = \r
                                        DeserializeComponent(fieldInfo.FieldType,\r