3765958 - downstreamPosition() can hit infinite loop when at end of doc
authortrey <trey@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Aug 2004 00:30:38 +0000 (00:30 +0000)
committertrey <trey@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Aug 2004 00:30:38 +0000 (00:30 +0000)
The problem was that I had a position that was after the maximum position in the text
node, because it was the old caret position before a backspace was processed.  Later
I happened to call downstream() on that position, and hit the bug.  Fix is to consider
a position past the end point of its node if it is *greater than* or equal to its max offset.

        Reviewed by Ken.

        * khtml/xml/dom_positioniterator.cpp:
        (DOM::PositionIterator::atEnd):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@7290 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/xml/dom_positioniterator.cpp

index 2698a15acae71bce2b407626065f0e259304bd5c..a049c873c358c943639efe3cacea4cfa85942fd3 100644 (file)
@@ -1,3 +1,17 @@
+2004-08-18  Trey Matteson  <trey@apple.com>
+
+       3765958 - downstreamPosition() can hit infinite loop when at end of doc
+       
+       The problem was that I had a position that was after the maximum position in the text
+       node, because it was the old caret position before a backspace was processed.  Later
+       I happened to call downstream() on that position, and hit the bug.  Fix is to consider
+       a position past the end point of its node if it is *greater than* or equal to its max offset.
+                       
+        Reviewed by Ken.
+
+        * khtml/xml/dom_positioniterator.cpp:
+        (DOM::PositionIterator::atEnd):
+
 2004-08-18  David Hyatt  <hyatt@apple.com>
 
        Make the header overlap the footer in the zero-line case.  Changes to Emerson's template will ensure the
index 5b47f51ce3d39bcfcc9a1f8e73129ed6d17eb39f..ce9562e91164b1e4ffe98dd49c69a186a9de5731 100644 (file)
@@ -81,7 +81,7 @@ bool PositionIterator::atEnd() const
     if (m_current.isEmpty())
         return true;
 
-    return m_current.offset() == m_current.node()->maxOffset() && 
+    return m_current.offset() >= m_current.node()->maxOffset() && 
         m_current.node()->nextLeafNode() == 0;
 }