Nikolay Sivov (@nsivov) commented about dlls/uiautomationcore/uia_com_client.c:
+ VARIANT v; + + TRACE("%p, %p\n", iface, ret_val); + + VariantInit(&v); + *ret_val = UIA_CustomControlTypeId; + hr = UiaGetPropertyValue(element->node, UIA_ControlTypePropertyId, &v); + if (SUCCEEDED(hr) && V_VT(&v) == VT_I4) + { + if ((control_type_info = uia_control_type_info_from_id(V_I4(&v)))) + *ret_val = control_type_info->control_type_id; + else + WARN("Provider returned invalid control type ID %ld\n", V_I4(&v)); + } + + return hr; I seems safer not to assume return type, and always to VariantClear() just in case. Because of what UiaGetReservedNotSupportedValue() returns for example.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/2248#note_24999