REGRESSION(r165385): [WebTextIterator currentRange] crashes
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 14 Mar 2014 23:55:30 +0000 (23:55 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 14 Mar 2014 23:55:30 +0000 (23:55 +0000)
https://bugs.webkit.org/show_bug.cgi?id=130271

Reviewed by Anders Carlsson.

After r165385, TextIterator::range no longer checked the nullity of m_positionNode. As a result,
[WebTextIterator currentRange] which simply calls TextIterator::range crashes when an application
that embeds WebKit doesn't check [WebTextIterator atEnd] first.

Preserve the old public API behavior by checking atEnd in [WebTextIterator currentRange].

* WebView/WebTextIterator.mm:
(-[WebTextIterator currentRange]):

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

Source/WebKit/mac/ChangeLog
Source/WebKit/mac/WebView/WebTextIterator.mm

index 07e5ff7ebc0575f3bba340816b9b1b2407b7ab91..71147d7ef2564eb0c5e94d4b371fc0ddca81f968 100644 (file)
@@ -1,3 +1,19 @@
+2014-03-14  Ryosuke Niwa  <rniwa@webkit.org>
+
+        REGRESSION(r165385): [WebTextIterator currentRange] crashes
+        https://bugs.webkit.org/show_bug.cgi?id=130271
+
+        Reviewed by Anders Carlsson.
+
+        After r165385, TextIterator::range no longer checked the nullity of m_positionNode. As a result,
+        [WebTextIterator currentRange] which simply calls TextIterator::range crashes when an application
+        that embeds WebKit doesn't check [WebTextIterator atEnd] first.
+
+        Preserve the old public API behavior by checking atEnd in [WebTextIterator currentRange].
+
+        * WebView/WebTextIterator.mm:
+        (-[WebTextIterator currentRange]):
+
 2014-03-12  Sergio Villar Senin  <svillar@igalia.com>
 
         Rename DEFINE_STATIC_LOCAL to DEPRECATED_DEFINE_STATIC_LOCAL
index 128abc95cb5fdc9e24b46366fc822f2c7b57f9e0..ece1e2f9e7b45e5e5536757edde0099eee7b2987 100644 (file)
 
 - (DOMRange *)currentRange
 {
-    return kit(_private->_textIterator->range().get());
+    WebCore::TextIterator& textIterator = *_private->_textIterator;
+    if (textIterator.atEnd())
+        return nullptr;
+    return kit(textIterator.range().get());
 }
 
 // FIXME: Consider deprecating this method and creating one that does not require copying 8-bit characters.