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.