diff --git a/dlls/mshtml/htmlbody.c b/dlls/mshtml/htmlbody.c index 26f5574c98b..d96142a9f14 100644 --- a/dlls/mshtml/htmlbody.c +++ b/dlls/mshtml/htmlbody.c @@ -178,10 +178,16 @@ static BOOL variant_to_nscolor(const VARIANT *v, nsAString *nsstr) } -static void nscolor_to_variant(const nsAString *nsstr, VARIANT *p) +static HRESULT return_nscolor(nsresult nsres, nsAString *nsstr, VARIANT *p) { const PRUnichar *color; + if(NS_FAILED(nsres)) { + ERR("failed: %08x\n", nsres); + nsAString_Finish(nsstr); + return E_FAIL; + } + nsAString_GetData(nsstr, &color); if(*color == '#') { @@ -190,7 +196,15 @@ static void nscolor_to_variant(const nsAString *nsstr, VARIANT *p) }else { V_VT(p) = VT_BSTR; V_BSTR(p) = SysAllocString(color); + if(!V_BSTR(p)) { + nsAString_Finish(nsstr); + return E_OUTOFMEMORY; + } } + + nsAString_Finish(nsstr); + TRACE("ret %s\n", debugstr_variant(p)); + return S_OK; } static inline HTMLBodyElement *impl_from_IHTMLBodyElement(IHTMLBodyElement *iface) @@ -502,13 +516,7 @@ static HRESULT WINAPI HTMLBodyElement_get_link(IHTMLBodyElement *iface, VARIANT nsAString_Init(&link_str, NULL); nsres = nsIDOMHTMLBodyElement_GetLink(This->nsbody, &link_str); - if(NS_FAILED(nsres)) - ERR("GetLink failed: %08x\n", nsres); - - nscolor_to_variant(&link_str, p); - nsAString_Finish(&link_str); - - return S_OK; + return return_nscolor(nsres, &link_str, p); } static HRESULT WINAPI HTMLBodyElement_put_vLink(IHTMLBodyElement *iface, VARIANT v) @@ -540,13 +548,7 @@ static HRESULT WINAPI HTMLBodyElement_get_vLink(IHTMLBodyElement *iface, VARIANT nsAString_Init(&vlink_str, NULL); nsres = nsIDOMHTMLBodyElement_GetVLink(This->nsbody, &vlink_str); - if(NS_FAILED(nsres)) - ERR("GetLink failed: %08x\n", nsres); - - nscolor_to_variant(&vlink_str, p); - nsAString_Finish(&vlink_str); - - return S_OK; + return return_nscolor(nsres, &vlink_str, p); } static HRESULT WINAPI HTMLBodyElement_put_aLink(IHTMLBodyElement *iface, VARIANT v) @@ -578,13 +580,7 @@ static HRESULT WINAPI HTMLBodyElement_get_aLink(IHTMLBodyElement *iface, VARIANT nsAString_Init(&alink_str, NULL); nsres = nsIDOMHTMLBodyElement_GetALink(This->nsbody, &alink_str); - if(NS_FAILED(nsres)) - ERR("GetALink failed: %08x\n", nsres); - - nscolor_to_variant(&alink_str, p); - nsAString_Finish(&alink_str); - - return S_OK; + return return_nscolor(nsres, &alink_str, p); } static HRESULT WINAPI HTMLBodyElement_put_onload(IHTMLBodyElement *iface, VARIANT v)