diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2021-01-11 10:08:01 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-01-12 08:47:57 +0000 |
commit | 0b758a57c8a0cd14dc2c0db54b194e59441c5c00 (patch) | |
tree | 3735e6ac68344eb92b1e469972d876cb23b2059e /src/plugins/platforms | |
parent | 4f7790e0b18a6021f0a2c7853fda75fb46cc6ce7 (diff) |
Windows QPA: Fix crashes when using screen reader with Q(Plain)TextEdit
Make sure the search start with valid values.
Task-number: QTBUG-89354
Change-Id: I5b5100db89c62f23748b5c88e9188cfe3811e6e8
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
(cherry picked from commit 7b7dda654acda884b8ebf6e7f2bfed315a566801)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r-- | src/plugins/platforms/windows/uiautomation/qwindowsuiatextrangeprovider.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/plugins/platforms/windows/uiautomation/qwindowsuiatextrangeprovider.cpp b/src/plugins/platforms/windows/uiautomation/qwindowsuiatextrangeprovider.cpp index d8b8f7281d..3465c55bc4 100644 --- a/src/plugins/platforms/windows/uiautomation/qwindowsuiatextrangeprovider.cpp +++ b/src/plugins/platforms/windows/uiautomation/qwindowsuiatextrangeprovider.cpp @@ -143,7 +143,9 @@ HRESULT QWindowsUiaTextRangeProvider::ExpandToEnclosingUnit(TextUnit unit) m_endOffset = m_startOffset + 1; } else { QString text = textInterface->text(0, len); - for (int t = m_startOffset; t >= 0; --t) { + const int start = m_startOffset >= 0 && m_startOffset < len + ? m_startOffset : len - 1; + for (int t = start; t >= 0; --t) { if (!isTextUnitSeparator(unit, text[t]) && ((t == 0) || isTextUnitSeparator(unit, text[t - 1]))) { m_startOffset = t; break; @@ -443,7 +445,9 @@ HRESULT QWindowsUiaTextRangeProvider::MoveEndpointByUnit(TextPatternRangeEndpoin } m_endOffset = qBound(m_startOffset, m_endOffset, len); } else { - for (int t = m_startOffset - 1; (t >= 0) && (moved > count); --t) { + const int start = m_startOffset >= 0 && m_startOffset <= len + ? m_startOffset : len; + for (int t = start - 1; (t >= 0) && (moved > count); --t) { if (!isTextUnitSeparator(unit, text[t]) && ((t == 0) || isTextUnitSeparator(unit, text[t - 1]))) { m_startOffset = t; --moved; |