Fix bug #10194 - SetElementValue(nonExistentElementName, null) caused NRE.
authorAtsushi Eno <atsushieno@veritas-vos-liberabit.com>
Wed, 7 Aug 2013 16:36:35 +0000 (01:36 +0900)
committerAtsushi Eno <atsushieno@veritas-vos-liberabit.com>
Wed, 7 Aug 2013 16:36:35 +0000 (01:36 +0900)
mcs/class/System.Xml.Linq/System.Xml.Linq/XElement.cs
mcs/class/System.Xml.Linq/Test/System.Xml.Linq/XElementTest.cs

index 80ba33b662332394e89f44393fbe7ea925b47263..f02fa3c15ad28c375771ca10555d3ec66f382530 100644 (file)
@@ -785,8 +785,9 @@ namespace System.Xml.Linq
                public void SetElementValue (XName name, object value)
                {
                        var element = Element (name);
-                       if (element == null && value != null) {
-                               Add (new XElement (name, value));
+                       if (element == null) {
+                               if (value != null)
+                                       Add (new XElement (name, value));
                        } else if (element != null && value == null) {
                                element.Remove ();
                        } else
index 5a5f255094c74c579df300882bd87538267d25e7..1b641243f48bc57ace835052b00e51e179eed995 100644 (file)
@@ -2050,5 +2050,12 @@ namespace MonoTests.System.Xml.Linq
                        XElement newElement = new XElement(ns + "geoloc");
                        Assert.AreEqual ("<geoloc xmlns=\"http://jabber.org/protocol/geoloc\" />", newElement.ToString (), "#1");
                }
+               
+               [Test] // bug #10194
+               public void SetElementValueNullOnNonExistingElement ()
+               {
+                       var xd = XDocument.Parse ("<foo />");
+                       xd.Root.SetElementValue (XName.Get ("bar"), null);
+               }
        }
 }