VariantCopy clears existing contents of pvargDest and thus requires it contain a valid (possibly-empty) VARIANT, not uninitialized garbage.
If a failure still occurs, propgate the HRESULT to GetAll*CustData.
Signed-off-by: Kevin Puetz PuetzKevinA@JohnDeere.com --- dlls/oleaut32/typelib.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c index 2f7ce53b1c..6dbd8c39b2 100644 --- a/dlls/oleaut32/typelib.c +++ b/dlls/oleaut32/typelib.c @@ -5290,6 +5290,7 @@ static HRESULT TLB_copy_all_custdata(const struct list *custdata_list, CUSTDATA TLBCustData *pCData; unsigned int ct; CUSTDATAITEM *cdi; + HRESULT hr = S_OK;
ct = list_count(custdata_list);
@@ -5302,11 +5303,13 @@ static HRESULT TLB_copy_all_custdata(const struct list *custdata_list, CUSTDATA cdi = pCustData->prgCustData; LIST_FOR_EACH_ENTRY(pCData, custdata_list, TLBCustData, entry){ cdi->guid = *TLB_get_guid_null(pCData->guid); - VariantCopy(&cdi->varValue, &pCData->data); + VariantInit(&cdi->varValue); + hr = VariantCopy(&cdi->varValue, &pCData->data); + if(FAILED(hr)) break; ++cdi; }
- return S_OK; + return hr; }