[Mac] Crash in Range::editingStartPosition
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 1 Nov 2012 19:02:16 +0000 (19:02 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 1 Nov 2012 19:02:16 +0000 (19:02 +0000)
https://bugs.webkit.org/show_bug.cgi?id=100972

Reviewed by Enrica Casucci.

Add a missing null pointer check. toNormalizedRange() can return null here, in which case the call to
pastLastNode() will crash.

No new tests since determining the exact condition under which we go through the said code path and
toNormalRange returns null is hard.

* editing/mac/EditorMac.mm:
(WebCore::Editor::fontForSelection):

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

Source/WebCore/ChangeLog
Source/WebCore/editing/mac/EditorMac.mm

index 7989d6f..e2de615 100644 (file)
@@ -1,3 +1,19 @@
+2012-11-01  Ryosuke Niwa  <rniwa@webkit.org>
+
+        [Mac] Crash in Range::editingStartPosition
+        https://bugs.webkit.org/show_bug.cgi?id=100972
+
+        Reviewed by Enrica Casucci.
+
+        Add a missing null pointer check. toNormalizedRange() can return null here, in which case the call to
+        pastLastNode() will crash.
+
+        No new tests since determining the exact condition under which we go through the said code path and
+        toNormalRange returns null is hard.
+
+        * editing/mac/EditorMac.mm:
+        (WebCore::Editor::fontForSelection):
+
 2012-11-01  Beth Dakin  <bdakin@apple.com>
 
         https://bugs.webkit.org/show_bug.cgi?id=100917
index 303a70b..6739960 100644 (file)
@@ -163,7 +163,8 @@ const SimpleFontData* Editor::fontForSelection(bool& hasMultipleFonts) const
 
     const SimpleFontData* font = 0;
     RefPtr<Range> range = m_frame->selection()->toNormalizedRange();
-    if (Node* startNode = adjustedSelectionStartForStyleComputation(m_frame->selection()->selection()).deprecatedNode()) {
+    Node* startNode = adjustedSelectionStartForStyleComputation(m_frame->selection()->selection()).deprecatedNode();
+    if (range && startNode) {
         Node* pastEnd = range->pastLastNode();
         // In the loop below, n should eventually match pastEnd and not become nil, but we've seen at least one
         // unreproducible case where this didn't happen, so check for null also.