From e31ae0461a05b70f71540f923c2b75601921f3b8 Mon Sep 17 00:00:00 2001 From: Mirko Brodesser Date: Thu, 19 Dec 2019 13:27:42 +0000 Subject: [PATCH] Bug 1600267: part 5) Call `ComparePoints` instead of `ComparePoints_Deprecated` in HyperTextAccessible. r=smaug Differential Revision: https://phabricator.services.mozilla.com/D55299 --HG-- extra : moz-landing-system : lando --- accessible/generic/HyperTextAccessible.cpp | 37 ++++++++++++++++++---- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/accessible/generic/HyperTextAccessible.cpp b/accessible/generic/HyperTextAccessible.cpp index 9123b3f93772..5cd82466db00 100644 --- a/accessible/generic/HyperTextAccessible.cpp +++ b/accessible/generic/HyperTextAccessible.cpp @@ -19,6 +19,7 @@ #include "nsCaret.h" #include "nsContentUtils.h" +#include "nsDebug.h" #include "nsFocusManager.h" #include "nsIEditingSession.h" #include "nsContainerFrame.h" @@ -30,6 +31,7 @@ #include "nsIMathMLFrame.h" #include "nsRange.h" #include "nsTextFragment.h" +#include "mozilla/Assertions.h" #include "mozilla/BinarySearch.h" #include "mozilla/EventStates.h" #include "mozilla/MathAlgorithms.h" @@ -1533,9 +1535,15 @@ bool HyperTextAccessible::SelectionBoundsAt(int32_t aSelectionNum, // Make sure start is before end, by swapping DOM points. This occurs when // the user selects backwards in the text. - int32_t rangeCompare = nsContentUtils::ComparePoints_Deprecated( - endNode, endOffset, startNode, startOffset); - if (rangeCompare < 0) { + const Maybe order = + nsContentUtils::ComparePoints(endNode, endOffset, startNode, startOffset); + + if (!order) { + MOZ_ASSERT_UNREACHABLE(); + return false; + } + + if (*order < 0) { nsINode* tempNode = startNode; startNode = endNode; endNode = tempNode; @@ -2025,9 +2033,15 @@ void HyperTextAccessible::GetSpellTextAttr( // case there is another range after this one. nsINode* endNode = range->GetEndContainer(); int32_t endNodeOffset = range->EndOffset(); - if (nsContentUtils::ComparePoints_Deprecated(aNode, aNodeOffset, endNode, - endNodeOffset) >= 0) + Maybe order = nsContentUtils::ComparePoints( + aNode, aNodeOffset, endNode, endNodeOffset); + if (NS_WARN_IF(!order)) { continue; + } + + if (*order >= 0) { + continue; + } // At this point our point is either in this range or before it but after // the previous range. So we check to see if the range starts before the @@ -2035,8 +2049,17 @@ void HyperTextAccessible::GetSpellTextAttr( // must be before the range and after the previous one if any. nsINode* startNode = range->GetStartContainer(); int32_t startNodeOffset = range->StartOffset(); - if (nsContentUtils::ComparePoints_Deprecated(startNode, startNodeOffset, - aNode, aNodeOffset) <= 0) { + order = nsContentUtils::ComparePoints(startNode, startNodeOffset, aNode, + aNodeOffset); + if (!order) { + // As (`aNode`, `aNodeOffset`) is comparable to the end of the range, it + // should also be comparable to the range's start. Returning here + // prevents crashes in release builds. + MOZ_ASSERT_UNREACHABLE(); + return; + } + + if (*order <= 0) { startOffset = DOMPointToOffset(startNode, startNodeOffset); endOffset = DOMPointToOffset(endNode, endNodeOffset);