diff --git a/accessible/generic/HyperTextAccessible.cpp b/accessible/generic/HyperTextAccessible.cpp index d95844bdb65e..1a8cabf9bddf 100644 --- a/accessible/generic/HyperTextAccessible.cpp +++ b/accessible/generic/HyperTextAccessible.cpp @@ -2206,7 +2206,10 @@ HyperTextAccessible::GetSpellTextAttr(nsINode* aNode, prevRange->EndOffset()); } - if (startOffset > *aStartOffset) + // The previous range might not be within this accessible. In that case, + // DOMPointToOffset returns length as a fallback. We don't want to use + // that offset if so, hence the startOffset < *aEndOffset check. + if (startOffset > *aStartOffset && startOffset < *aEndOffset) *aStartOffset = startOffset; if (endOffset < *aEndOffset) @@ -2223,7 +2226,10 @@ HyperTextAccessible::GetSpellTextAttr(nsINode* aNode, startOffset = DOMPointToOffset(prevRange->GetEndContainer(), prevRange->EndOffset()); - if (startOffset > *aStartOffset) + // The previous range might not be within this accessible. In that case, + // DOMPointToOffset returns length as a fallback. We don't want to use + // that offset if so, hence the startOffset < *aEndOffset check. + if (startOffset > *aStartOffset && startOffset < *aEndOffset) *aStartOffset = startOffset; } diff --git a/accessible/tests/mochitest/textattrs/a11y.ini b/accessible/tests/mochitest/textattrs/a11y.ini index 046bd57e815b..98855d84b5b1 100644 --- a/accessible/tests/mochitest/textattrs/a11y.ini +++ b/accessible/tests/mochitest/textattrs/a11y.ini @@ -5,3 +5,4 @@ support-files = [test_general.html] [test_invalid.html] +[test_spelling.html] diff --git a/accessible/tests/mochitest/textattrs/test_spelling.html b/accessible/tests/mochitest/textattrs/test_spelling.html new file mode 100644 index 000000000000..030b20c3be2c --- /dev/null +++ b/accessible/tests/mochitest/textattrs/test_spelling.html @@ -0,0 +1,53 @@ + + +
+++ + +