diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog index ba5bc9eb3d4e61e212eefb8f54c385be5c50e767..5687faedab229e860be5304a19bdbc37fcc4e6ba 100644 --- a/WebCore/ChangeLog +++ b/WebCore/ChangeLog @@ -1,3 +1,16 @@ +2009-01-23 Chris Fleizach + + Reviewed by Beth Dakin. + + Bug 23509: Crash at -[WebCoreAXObject doAXNextSentenceEndTextMarkerForTextMarker:] + https://bugs.webkit.org/show_bug.cgi?id=23509 + + Add null checking around next/previous sentence retrieval in AX code + + * page/AccessibilityObject.cpp: + (WebCore::AccessibilityObject::nextSentenceEndPosition): + (WebCore::AccessibilityObject::previousSentenceStartPosition): + 2009-01-23 David Hyatt Fix for REGRESSION: hover feedback not showing on many sites diff --git a/WebCore/page/AccessibilityObject.cpp b/WebCore/page/AccessibilityObject.cpp index e868da28c84281a8ad685c7b4afdbd68ad3d1153..67b95fde1499aa8013d4126601ca3fe969162b19 100644 --- a/WebCore/page/AccessibilityObject.cpp +++ b/WebCore/page/AccessibilityObject.cpp @@ -739,7 +739,13 @@ VisiblePosition AccessibilityObject::nextSentenceEndPosition(const VisiblePositi // an empty line is considered a sentence. If it's skipped, then the sentence parser will not // see this empty line. Instead, return the end position of the empty line. VisiblePosition endPosition; - String lineString = plainText(makeRange(startOfLine(visiblePos), endOfLine(visiblePos)).get()); + VisiblePosition startOfLinePosition = startOfLine(nextVisiblePos); + VisiblePosition endOfLinePosition = endOfLine(nextVisiblePos); + + String lineString; + if (startOfLinePosition.isNotNull() && endOfLinePosition.isNotNull()) + lineString = plainText(makeRange(startOfLinePosition, endOfLinePosition).get()); + if (lineString.isEmpty()) endPosition = nextVisiblePos; else @@ -762,7 +768,13 @@ VisiblePosition AccessibilityObject::previousSentenceStartPosition(const Visible // treat empty line as a separate sentence. VisiblePosition startPosition; - String lineString = plainText(makeRange(startOfLine(previousVisiblePos), endOfLine(previousVisiblePos)).get()); + VisiblePosition startOfLinePosition = startOfLine(previousVisiblePos); + VisiblePosition endOfLinePosition = endOfLine(previousVisiblePos); + + String lineString; + if (startOfLinePosition.isNotNull() && endOfLinePosition.isNotNull()) + lineString = plainText(makeRange(startOfLinePosition, endOfLinePosition).get()); + if (lineString.isEmpty()) startPosition = previousVisiblePos; else