Reviewed by Kevin.
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 4 Jan 2005 03:24:00 +0000 (03:24 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 4 Jan 2005 03:24:00 +0000 (03:24 +0000)
<rdar://problem/3935390> Tiger 8A341: nil deref crash in DOM::NodeImpl::traverseNextNode

* khtml/html/html_miscimpl.cpp:
        (HTMLCollectionImpl::traverseNextItem): Assert that the starting point is not nil,
it should not ever be (now).
        (HTMLCollectionImpl::item): When traversing items stop when we hit
nil, meaning the end to avoid triggering above assert (formerly crash).

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/html/html_miscimpl.cpp

index 676ee0b83dd9582e9ff0626245b56dfc5f642325..0e68f3fc0b691e99eaa43b259e7ba61c77374eba 100644 (file)
@@ -1,3 +1,15 @@
+2005-01-03  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Kevin.
+
+       <rdar://problem/3935390> Tiger 8A341: nil deref crash in DOM::NodeImpl::traverseNextNode
+        
+       * khtml/html/html_miscimpl.cpp:
+        (HTMLCollectionImpl::traverseNextItem): Assert that the starting point is not nil,
+       it should not ever be (now).
+        (HTMLCollectionImpl::item): When traversing items stop when we hit
+       nil, meaning the end to avoid triggering above assert (formerly crash).
+
 2005-01-03  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by John and Kevin.
index 8792851459855bf54d7345fd896d69779e7f2898..8eaf4f125d05d6dad5d932d24d7bd5b80b1ad440 100644 (file)
@@ -103,6 +103,8 @@ void HTMLCollectionImpl::resetCollectionInfo() const
 
 NodeImpl *HTMLCollectionImpl::traverseNextItem(NodeImpl *current) const
 {
+    assert(current);
+
     current = current->traverseNextNode(base);
 
     while (current) {
@@ -239,7 +241,7 @@ NodeImpl *HTMLCollectionImpl::item( unsigned long index ) const
              return 0;
      }
      NodeImpl *node = info->current;
-     for (unsigned pos = info->position; pos < index; pos++) {
+     for (unsigned pos = info->position; node && pos < index; pos++) {
          node = traverseNextItem(node);
      }     
      info->current = node;