[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