Author: kostat
Date: 2008-02-10 07:27:49 -0500 (Sun, 10 Feb 2008)
New Revision: 95369
Modified:
trunk/mcs/class/System.XML/System.Xml.XPath/ChangeLog
trunk/mcs/class/System.XML/System.Xml.XPath/Iterator.cs
trunk/mcs/class/System.XML/Test/System.Xml.XPath/SelectNodesTests.cs
Log:
prevent endless recursion in AncestorIterator while collecting results
Modified: trunk/mcs/class/System.XML/System.Xml.XPath/ChangeLog
===================================================================
--- trunk/mcs/class/System.XML/System.Xml.XPath/ChangeLog 2008-02-10
12:13:23 UTC (rev 95368)
+++ trunk/mcs/class/System.XML/System.Xml.XPath/ChangeLog 2008-02-10
12:27:49 UTC (rev 95369)
@@ -1,3 +1,8 @@
+2008-01-10 Konstantin Triger <[EMAIL PROTECTED]>
+
+ * Iterator.cs: prevent endless recursion in AncestorIterator
+ while collecting results.
+
2008-01-12 Sebastien Pouliot <[EMAIL PROTECTED]>
* DefaultContext.cs: Fix direct comparison with NaN. Found by
Modified: trunk/mcs/class/System.XML/System.Xml.XPath/Iterator.cs
===================================================================
--- trunk/mcs/class/System.XML/System.Xml.XPath/Iterator.cs 2008-02-10
12:13:23 UTC (rev 95368)
+++ trunk/mcs/class/System.XML/System.Xml.XPath/Iterator.cs 2008-02-10
12:27:49 UTC (rev 95369)
@@ -367,27 +367,16 @@
{
navigators = new ArrayList ();
- XPathNavigator ancestors = startPosition.Clone ();
- if (!ancestors.MoveToParent ())
- return;
- while (ancestors.NodeType != XPathNodeType.Root) {
+ XPathNavigator ancestors = startPosition.Clone ();
+ while (ancestors.NodeType != XPathNodeType.Root &&
ancestors.MoveToParent ())
navigators.Add (ancestors.Clone ());
- ancestors.MoveToParent ();
- }
currentPosition = navigators.Count;
}
public override bool MoveNextCore ()
{
- if (navigators == null) {
+ if (navigators == null)
CollectResults ();
- if (startPosition.NodeType !=
XPathNodeType.Root) {
- // First time it returns Root
- _nav.MoveToRoot ();
- Current.MoveTo (_nav);
- return true;
- }
- }
if (currentPosition == 0)
return false;
_nav.MoveTo ((XPathNavigator) navigators
[--currentPosition]);
Modified: trunk/mcs/class/System.XML/Test/System.Xml.XPath/SelectNodesTests.cs
===================================================================
--- trunk/mcs/class/System.XML/Test/System.Xml.XPath/SelectNodesTests.cs
2008-02-10 12:13:23 UTC (rev 95368)
+++ trunk/mcs/class/System.XML/Test/System.Xml.XPath/SelectNodesTests.cs
2008-02-10 12:27:49 UTC (rev 95369)
@@ -276,6 +276,22 @@
AssertEquals ("hoge", nl [1].LocalName);
AssertEquals ("xml", nl [2].LocalName);
AssertEquals (3, nl.Count);
+ }
+
+ [Test]
+ public void AncestorAxis () {
+ XmlDocument doc = new XmlDocument ();
+ doc.LoadXml ("<foo><bar><baz><bax
/></baz></bar></foo>");
+
+ XmlNode bar = doc.GetElementsByTagName ("bar") [0];
+ XmlElement barClone = (XmlElement) bar.CloneNode (true);
+ XmlNodeList baxs = barClone.GetElementsByTagName
("bax");
+
+ XmlNode bax = baxs [0];
+ XmlNodeList ans = bax.SelectNodes ("ancestor::*");
+ AssertEquals (2, ans.Count);
+ AssertEquals ("bar", ans [0].Name);
+ AssertEquals ("baz", ans [1].Name);
}
}
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches