Reviewed by John
authorkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Oct 2004 17:08:42 +0000 (17:08 +0000)
committerkocienda <kocienda@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 26 Oct 2004 17:08:42 +0000 (17:08 +0000)
        * khtml/editing/htmlediting.cpp:
        (khtml::CompositeEditCommand::deleteInsignificantText): Do not call replaceText
        with a zero-length string. That triggers an assert. Call deleteText instead,
        using the same indices that are passed to replaceText.

        Cleaned up the asserts in these three functions below, making them
        more consistent. This is not needed for the fix, but I tripped over
        these in the course of debugging.

        (khtml::InsertTextCommand::InsertTextCommand):
        (khtml::InsertTextCommand::doApply):
        (khtml::InsertTextCommand::doUnapply):

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/editing/htmlediting.cpp

index 483ffa36ef2062298f21402aefd37813b43c4db1..092fa3ad6729978bd2271353814fa04c7e2055d2 100644 (file)
@@ -1,3 +1,20 @@
+2004-10-26  Ken Kocienda  <kocienda@apple.com>
+
+        Reviewed by John
+
+        * khtml/editing/htmlediting.cpp:
+        (khtml::CompositeEditCommand::deleteInsignificantText): Do not call replaceText
+        with a zero-length string. That triggers an assert. Call deleteText instead, 
+        using the same indices that are passed to replaceText.
+        
+        Cleaned up the asserts in these three functions below, making them
+        more consistent. This is not needed for the fix, but I tripped over
+        these in the course of debugging.
+        
+        (khtml::InsertTextCommand::InsertTextCommand):
+        (khtml::InsertTextCommand::doApply):
+        (khtml::InsertTextCommand::doUnapply):
+
 2004-10-25  Adele Amchan <adele@apple.com>
 
         Reviewed by Darin.
index 37b88523f093dae9e128afe8acb3ba5a0272b949..9a00c3e78db56d125a6e7864d8cb30365962bc52 100644 (file)
@@ -810,7 +810,16 @@ void CompositeEditCommand::deleteInsignificantText(TextImpl *textNode, int start
 
     if (str) {
         // Replace the text between start and end with our pruned version.
-        replaceText(textNode, start, end - start, str);
+        if (str->l > 0) {
+            replaceText(textNode, start, end - start, str);
+        }
+        else {
+            // Assert that we are not going to delete all of the text in the node.
+            // If we were, that should have been done above with the call to 
+            // removeNode and return.
+            ASSERT(start > 0 || (unsigned long)end - start < textNode->length());
+            deleteText(textNode, start, end - start);
+        }
         str->deref();
     }
 }
@@ -1985,6 +1994,7 @@ InsertTextCommand::InsertTextCommand(DocumentImpl *document, TextImpl *node, lon
 {
     ASSERT(m_node);
     ASSERT(m_offset >= 0);
+    ASSERT(!text.isEmpty());
     
     m_node->ref();
     m_text = text.copy(); // make a copy to ensure that the string never changes
@@ -1999,9 +2009,8 @@ InsertTextCommand::~InsertTextCommand()
 void InsertTextCommand::doApply()
 {
     ASSERT(m_node);
-
-    if (m_text.isEmpty())
-       return;
+    ASSERT(m_offset >= 0);
+    ASSERT(!m_text.isEmpty());
 
     int exceptionCode = 0;
     m_node->insertData(m_offset, m_text, exceptionCode);
@@ -2011,11 +2020,9 @@ void InsertTextCommand::doApply()
 void InsertTextCommand::doUnapply()
 {
     ASSERT(m_node);
+    ASSERT(m_offset >= 0);
     ASSERT(!m_text.isEmpty());
 
-    if (m_text.isEmpty())
-       return;
-
     int exceptionCode = 0;
     m_node->deleteData(m_offset, m_text.length(), exceptionCode);
     ASSERT(exceptionCode == 0);