summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp7
-rw-r--r--tests/auto/other/qaccessibility/tst_qaccessibility.cpp5
2 files changed, 9 insertions, 3 deletions
diff --git a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp
index 7cc2b2aeb0..c23902014c 100644
--- a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp
+++ b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.cpp
@@ -577,9 +577,10 @@ HRESULT STDMETHODCALLTYPE QWindowsMsaaAccessible::accLocation(long *pxLeft, long
QRect rect;
if (varID.lVal) {
- QAIPointer child = QAIPointer(accessible->child(varID.lVal - 1));
- if (child->isValid())
- rect = child->rect();
+ QAIPointer child(childPointer(varID));
+ if (!child)
+ return E_FAIL;
+ rect = child->rect();
} else {
rect = accessible->rect();
}
diff --git a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
index 68fde2fd2e..b0d0459326 100644
--- a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
+++ b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
@@ -3113,6 +3113,11 @@ void tst_QAccessibility::bridgeTest()
// **** Test accLocation ****
long x, y, w, h;
+ // Do not crash on insane arguments.
+ varChild.lVal = 999;
+ hr = iaccButton->accLocation(&x, &y, &w, &h, varChild);
+ QCOMPARE(SUCCEEDED(hr), false);
+
hr = iaccButton->accLocation(&x, &y, &w, &h, varSELF);
QCOMPARE(buttonRect, QRect(x, y, w, h));