[PATCH v2 1/2] oleacc: Implement AccessibleObjectFromEvent.
Piotr Caban
piotr.caban at gmail.com
Fri Aug 27 12:48:45 CDT 2021
Hi Connor,
On 8/27/21 5:21 PM, Connor McAdams wrote:
> +HRESULT WINAPI AccessibleObjectFromEvent( HWND hwnd, DWORD object_id, DWORD child_id,
> + IAccessible **acc_out, VARIANT *child_id_out )
> +{
> + VARIANT child_id_variant;
> + IAccessible *acc = NULL;
> + IDispatch *child = NULL;
> + HRESULT hr;
> +
> + TRACE("%p %d %d %p %p\n", hwnd, object_id, child_id, acc_out, child_id_out);
> +
> + if (!acc_out)
> + return E_INVALIDARG;
> + *acc_out = NULL;
child_id_out should be also zeroed at this point.
> +
> + hr = AccessibleObjectFromWindow(hwnd, object_id, &IID_IAccessible, (void **)&acc);
> + if (FAILED(hr))
> + return hr;
> +
> + variant_init_i4(&child_id_variant, child_id);
> + hr = IAccessible_get_accChild(acc, child_id_variant, &child);
> + if (FAILED(hr))
> + TRACE("get_accChild failed with %#x!\n", hr);
> +
> + if (child)
A bad behaving IAccessible implementation may set child and return
error. Please change it to something like:
if (SUCCEEDED(hr) && child)
> + {
> + IAccessible_Release(acc);
> +
> + IDispatch_QueryInterface(child, &IID_IAccessible, (void **)&acc);
Please handle QueryInterface failure here.
Thanks,
Piotr
More information about the wine-devel
mailing list