Crashes in WebCore::DocumentMarkerController::removeMarkersFromMarkerMapVectorPair...
authoradele@apple.com <adele@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Nov 2010 23:55:30 +0000 (23:55 +0000)
committeradele@apple.com <adele@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Nov 2010 23:55:30 +0000 (23:55 +0000)
https://bugs.webkit.org/show_bug.cgi?id=48918
<rdar://problem/8620602>

Patch by Jia Pu <jpu@apple.com> on 2010-11-03
Reviewed by Darin Adler.

I haven't been able to found a reliable way to reproduce the bug. However, whenever it happens,
the crash is caused by a null node pointer returned by TextIterator. So it seems to be a
safe fix to guard against that.

* editing/Editor.cpp: (WebCore::Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited):

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

WebCore/ChangeLog
WebCore/editing/Editor.cpp

index 2da7d81..c7442cc 100644 (file)
@@ -1,3 +1,17 @@
+2010-11-03  Jia Pu  <jpu@apple.com>
+
+        Reviewed by Darin Adler.
+
+        Crashes in WebCore::DocumentMarkerController::removeMarkersFromMarkerMapVectorPair() when deleting multiple lines of text.
+        https://bugs.webkit.org/show_bug.cgi?id=48918
+        <rdar://problem/8620602>
+
+        I haven't been able to found a reliable way to reproduce the bug. However, whenever it happens,
+        the crash is caused by a null node pointer returned by TextIterator. So it seems to be a 
+        safe fix to guard against that. 
+
+        * editing/Editor.cpp: (WebCore::Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited):
+
 2010-11-02  Zhenyao Mo  <zmo@google.com>
 
         Reviewed by Kenneth Russell.
index 22cb7b1..74b165c 100644 (file)
@@ -2537,6 +2537,8 @@ void Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited(bool doNotRemove
     Vector<RangeMarkerPair, 16> markersToRemove;
     for (TextIterator textIterator(wordRange.get()); !textIterator.atEnd(); textIterator.advance()) {
         Node* node = textIterator.node();
+        if (!node)
+            continue;
         if (node == startOfFirstWord.deepEquivalent().containerNode() || node == endOfLastWord.deepEquivalent().containerNode()) {
             // First word and last word can belong to the same node
             bool processFirstWord = node == startOfFirstWord.deepEquivalent().containerNode() && document->markers()->hasMarkers(rangeOfFirstWord.get(), DocumentMarker::Spelling | DocumentMarker::CorrectionIndicator);