Fix for 3621138, crash on hrweb.apple.com. Make sure that in the case where objects...
authorhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Jul 2004 22:26:57 +0000 (22:26 +0000)
committerhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 12 Jul 2004 22:26:57 +0000 (22:26 +0000)
blocks that we just delete all line boxes.

        Reviewed by kocienda

        * khtml/rendering/render_block.cpp:
        (khtml::RenderBlock::removeChild):

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/rendering/render_block.cpp
WebCore/khtml/rendering/render_block.h

index 31fc185..6d11da2 100644 (file)
@@ -1,3 +1,13 @@
+2004-07-12  David Hyatt  <hyatt@apple.com>
+
+       Fix for 3621138, crash on hrweb.apple.com.  Make sure that in the case where objects get pulled up from merging
+       blocks that we just delete all line boxes.
+       
+        Reviewed by kocienda
+
+        * khtml/rendering/render_block.cpp:
+        (khtml::RenderBlock::removeChild):
+
 2004-07-10  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by John.
index a978411..2f89fe5 100644 (file)
@@ -264,17 +264,6 @@ void RenderBlock::makeChildrenNonInline(RenderObject *insertionPoint)
     }
 }
 
-void RenderBlock::removeChildrenFromLineBoxes()
-{
-    // In the case where we do a collapse/merge from the destruction
-    // of a block in between two anonymous blocks with inlines (see removeChild in render_block.cpp),
-    // we have line boxes that need to have their parents nulled.
-    KHTMLAssert(!documentBeingDestroyed());
-    for (InlineFlowBox* box = m_firstLineBox; box; box = box->nextFlowBox())
-        for (InlineBox* child = box->firstChild(); child; child = child->nextOnLine())
-            child->remove();
-}
-
 void RenderBlock::removeChild(RenderObject *oldChild)
 {
     // If this child is a block, and if our previous and next siblings are
@@ -286,9 +275,6 @@ void RenderBlock::removeChild(RenderObject *oldChild)
     if (!documentBeingDestroyed() && !isInline() && !oldChild->isInline() && !oldChild->continuation() &&
         prev && prev->isAnonymousBlock() && prev->childrenInline() &&
         next && next->isAnonymousBlock() && next->childrenInline()) {
-        // Clean up the line box children inside |next|.
-        static_cast<RenderBlock*>(next)->removeChildrenFromLineBoxes();
-        
         // Take all the children out of the |next| block and put them in
         // the |prev| block.
         RenderObject* o = next->firstChild();
@@ -321,7 +307,8 @@ void RenderBlock::removeChild(RenderObject *oldChild)
             appendChildNode(anonBlock->removeChildNode(no));
             no->setNeedsLayoutAndMinMaxRecalc();
         }
-        
+        setNeedsLayoutAndMinMaxRecalc();
+
         // Nuke the now-empty block.
         anonBlock->detach();
     }
index 9cb16eb..271d83d 100644 (file)
@@ -213,7 +213,6 @@ public:
 
 protected:
     void newLine();
-    void removeChildrenFromLineBoxes();
 
 private:
     DOM::Position positionForBox(InlineBox *box, bool start=true) const;