From 979b42d749d89f021bdc5554f542d27c47d5572a Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Sun, 23 Mar 2008 02:15:39 +0100 Subject: [PATCH] mshtml: Don't access BSCallback directly in nsembed.c. --- dlls/mshtml/mshtml_private.h | 1 + dlls/mshtml/navigate.c | 7 +++++++ dlls/mshtml/nsembed.c | 24 +++++++++++++++--------- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 66bb11d241f..2936f762b03 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -435,6 +435,7 @@ void set_document_bscallback(HTMLDocument*,BSCallback*); void set_current_mon(HTMLDocument*,IMoniker*); void channelbsc_set_channel(BSCallback*,nsChannel*,nsIStreamListener*,nsISupports*); +IMoniker *get_channelbsc_mon(BSCallback*); IHTMLSelectionObject *HTMLSelectionObject_Create(HTMLDocument*,nsISelection*); IHTMLTxtRange *HTMLTxtRange_Create(HTMLDocument*,nsIDOMRange*); diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c index 66cea253113..e3ac73560bf 100644 --- a/dlls/mshtml/navigate.c +++ b/dlls/mshtml/navigate.c @@ -866,6 +866,13 @@ HRESULT start_binding(HTMLDocument *doc, BSCallback *bscallback, IBindCtx *bctx) return S_OK; } +IMoniker *get_channelbsc_mon(BSCallback *This) +{ + if(This->mon) + IMoniker_AddRef(This->mon); + return This->mon; +} + void set_document_bscallback(HTMLDocument *doc, BSCallback *callback) { BSCallback *iter; diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c index efdad04549e..5d9b2478010 100644 --- a/dlls/mshtml/nsembed.c +++ b/dlls/mshtml/nsembed.c @@ -1138,16 +1138,22 @@ static nsresult NSAPI nsURIContentListener_OnStartURIOpen(nsIURIContentListener nsIWineURI_SetNSContainer(wine_uri, This); nsIWineURI_SetIsDocumentURI(wine_uri, TRUE); - if(This->bscallback && This->bscallback->mon) { - LPWSTR wine_url; - HRESULT hres; + if(This->bscallback) { + IMoniker *mon = get_channelbsc_mon(This->bscallback); - hres = IMoniker_GetDisplayName(This->bscallback->mon, NULL, 0, &wine_url); - if(SUCCEEDED(hres)) { - nsIWineURI_SetWineURL(wine_uri, wine_url); - CoTaskMemFree(wine_url); - }else { - WARN("GetDisplayName failed: %08x\n", hres); + if(mon) { + LPWSTR wine_url; + HRESULT hres; + + hres = IMoniker_GetDisplayName(mon, NULL, 0, &wine_url); + if(SUCCEEDED(hres)) { + nsIWineURI_SetWineURL(wine_uri, wine_url); + CoTaskMemFree(wine_url); + }else { + WARN("GetDisplayName failed: %08x\n", hres); + } + + IMoniker_Release(mon); } }