Jacek Caban : shdocvw: Store DocHost url on a regular heap.
Alexandre Julliard
julliard at winehq.org
Wed Jun 30 11:13:43 CDT 2010
Module: wine
Branch: master
Commit: aed47627f6e1db38b52874acb12b76ad701fe0ef
URL: http://source.winehq.org/git/wine.git/?a=commit;h=aed47627f6e1db38b52874acb12b76ad701fe0ef
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Jun 29 21:03:22 2010 +0200
shdocvw: Store DocHost url on a regular heap.
---
dlls/shdocvw/dochost.c | 2 +-
dlls/shdocvw/navigate.c | 40 +++++++++++++++++++++++++++++-----------
2 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/dlls/shdocvw/dochost.c b/dlls/shdocvw/dochost.c
index 2196eb9..b3db012 100644
--- a/dlls/shdocvw/dochost.c
+++ b/dlls/shdocvw/dochost.c
@@ -820,5 +820,5 @@ void DocHost_Release(DocHost *This)
ConnectionPointContainer_Destroy(&This->cps);
- CoTaskMemFree(This->url);
+ heap_free(This->url);
}
diff --git a/dlls/shdocvw/navigate.c b/dlls/shdocvw/navigate.c
index 3310cba..5166e97 100644
--- a/dlls/shdocvw/navigate.c
+++ b/dlls/shdocvw/navigate.c
@@ -111,6 +111,23 @@ static void set_status_text(BindStatusCallback *This, LPCWSTR str)
IOleInPlaceFrame_SetStatusText(This->doc_host->frame, str);
}
+static HRESULT set_dochost_url(DocHost *This, const WCHAR *url)
+{
+ WCHAR *new_url;
+
+ if(url) {
+ new_url = heap_strdupW(url);
+ if(!new_url)
+ return E_OUTOFMEMORY;
+ }else {
+ new_url = NULL;
+ }
+
+ heap_free(This->url);
+ This->url = new_url;
+ return S_OK;
+}
+
#define BINDSC_THIS(iface) DEFINE_THIS(BindStatusCallback, BindStatusCallback, iface)
static HRESULT WINAPI BindStatusCallback_QueryInterface(IBindStatusCallback *iface,
@@ -502,6 +519,7 @@ static HRESULT bind_to_object(DocHost *This, IMoniker *mon, LPCWSTR url, IBindCt
IBindStatusCallback *callback)
{
IUnknown *unk = NULL;
+ WCHAR *display_name;
HRESULT hres;
if(mon) {
@@ -512,10 +530,16 @@ static HRESULT bind_to_object(DocHost *This, IMoniker *mon, LPCWSTR url, IBindCt
return hres;
}
- CoTaskMemFree(This->url);
- hres = IMoniker_GetDisplayName(mon, 0, NULL, &This->url);
- if(FAILED(hres))
+ hres = IMoniker_GetDisplayName(mon, 0, NULL, &display_name);
+ if(FAILED(hres)) {
FIXME("GetDisplayName failed: %08x\n", hres);
+ return hres;
+ }
+
+ hres = set_dochost_url(This, display_name);
+ CoTaskMemFree(display_name);
+ if(FAILED(hres))
+ return hres;
IBindCtx_RegisterObjectParam(bindctx, (LPOLESTR)SZ_HTML_CLIENTSITE_OBJECTPARAM,
(IUnknown*)CLIENTSITE(This));
@@ -538,18 +562,12 @@ static HRESULT bind_to_object(DocHost *This, IMoniker *mon, LPCWSTR url, IBindCt
static void html_window_navigate(DocHost *This, IHTMLPrivateWindow *window, BSTR url, BSTR headers, SAFEARRAY *post_data)
{
VARIANT headers_var, post_data_var;
- WCHAR *new_url;
BSTR empty_str;
- DWORD size;
HRESULT hres;
- size = (strlenW(url)+1)*sizeof(WCHAR);
- new_url = CoTaskMemAlloc(size);
- if(!new_url)
+ hres = set_dochost_url(This, url);
+ if(FAILED(hres))
return;
- memcpy(new_url, url, size);
- CoTaskMemFree(This->url);
- This->url = new_url;
empty_str = SysAllocStringLen(NULL, 0);
More information about the wine-cvs
mailing list