Jacek Caban : shdocvw: Use heap_alloc_zero to allocate DocHost objects.

Alexandre Julliard julliard at winehq.org
Mon Mar 15 12:19:34 CDT 2010


Module: wine
Branch: master
Commit: c5e53bd66569516e947c1c6437c9f8f71ff13580
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c5e53bd66569516e947c1c6437c9f8f71ff13580

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sat Mar 13 16:43:06 2010 +0100

shdocvw: Use heap_alloc_zero to allocate DocHost objects.

---

 dlls/shdocvw/iexplore.c   |    2 +-
 dlls/shdocvw/oleobject.c  |   11 -----------
 dlls/shdocvw/shdocvw.h    |    5 +++++
 dlls/shdocvw/webbrowser.c |   16 +++++-----------
 4 files changed, 11 insertions(+), 23 deletions(-)

diff --git a/dlls/shdocvw/iexplore.c b/dlls/shdocvw/iexplore.c
index ca2c868..d65810f 100644
--- a/dlls/shdocvw/iexplore.c
+++ b/dlls/shdocvw/iexplore.c
@@ -163,7 +163,7 @@ HRESULT InternetExplorer_Create(IUnknown *pOuter, REFIID riid, void **ppv)
 
     TRACE("(%p %s %p)\n", pOuter, debugstr_guid(riid), ppv);
 
-    ret = heap_alloc(sizeof(InternetExplorer));
+    ret = heap_alloc_zero(sizeof(InternetExplorer));
     ret->ref = 0;
 
     ret->doc_host.disp = (IDispatch*)WEBBROWSER2(ret);
diff --git a/dlls/shdocvw/oleobject.c b/dlls/shdocvw/oleobject.c
index f67edb7..933b562 100644
--- a/dlls/shdocvw/oleobject.c
+++ b/dlls/shdocvw/oleobject.c
@@ -960,17 +960,6 @@ void WebBrowser_OleObject_Init(WebBrowser *This)
     This->lpOleInPlaceActiveObjectVtbl = &OleInPlaceActiveObjectVtbl;
     This->lpOleCommandTargetVtbl     = &OleCommandTargetVtbl;
 
-    This->client = NULL;
-    This->inplace = NULL;
-    This->container = NULL;
-    This->frame_hwnd = NULL;
-    This->uiwindow = NULL;
-    This->shell_embedding_hwnd = NULL;
-
-    memset(&This->pos_rect, 0, sizeof(RECT));
-    memset(&This->clip_rect, 0, sizeof(RECT));
-    memset(&This->frameinfo, 0, sizeof(OLEINPLACEFRAMEINFO));
-
     /* Default size is 50x20 pixels, in himetric units */
     This->extent.cx = MulDiv( 50, 2540, dpi_x );
     This->extent.cy = MulDiv( 20, 2540, dpi_y );
diff --git a/dlls/shdocvw/shdocvw.h b/dlls/shdocvw/shdocvw.h
index c5b9c9a..c734f04 100644
--- a/dlls/shdocvw/shdocvw.h
+++ b/dlls/shdocvw/shdocvw.h
@@ -262,6 +262,11 @@ static inline void *heap_alloc(size_t len)
     return HeapAlloc(GetProcessHeap(), 0, len);
 }
 
+static inline void *heap_alloc_zero(size_t len)
+{
+    return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);
+}
+
 static inline void *heap_realloc(void *mem, size_t len)
 {
     return HeapReAlloc(GetProcessHeap(), 0, mem, len);
diff --git a/dlls/shdocvw/webbrowser.c b/dlls/shdocvw/webbrowser.c
index b0633b0..2ac9b99 100644
--- a/dlls/shdocvw/webbrowser.c
+++ b/dlls/shdocvw/webbrowser.c
@@ -1115,23 +1115,20 @@ static HRESULT WebBrowser_Create(INT version, IUnknown *pOuter, REFIID riid, voi
 
     TRACE("(%p %s %p) version=%d\n", pOuter, debugstr_guid(riid), ppv, version);
 
-    ret = heap_alloc(sizeof(WebBrowser));
+    ret = heap_alloc_zero(sizeof(WebBrowser));
 
     ret->lpWebBrowser2Vtbl = &WebBrowser2Vtbl;
     ret->lpServiceProviderVtbl = &ServiceProviderVtbl;
-    ret->ref = 0;
+    ret->ref = 1;
     ret->version = version;
 
     DocHost_Init(&ret->doc_host, (IDispatch*)WEBBROWSER2(ret));
 
-    ret->register_browser = VARIANT_FALSE;
     ret->visible = VARIANT_TRUE;
     ret->menu_bar = VARIANT_TRUE;
     ret->address_bar = VARIANT_TRUE;
     ret->status_bar = VARIANT_TRUE;
     ret->tool_bar = VARIANT_TRUE;
-    ret->full_screen = VARIANT_FALSE;
-    ret->theater_mode = VARIANT_FALSE;
 
     WebBrowser_OleObject_Init(ret);
     WebBrowser_ViewObject_Init(ret);
@@ -1139,14 +1136,11 @@ static HRESULT WebBrowser_Create(INT version, IUnknown *pOuter, REFIID riid, voi
     WebBrowser_ClassInfo_Init(ret);
     WebBrowser_HlinkFrame_Init(ret);
 
+    SHDOCVW_LockModule();
+
     hres = IWebBrowser_QueryInterface(WEBBROWSER(ret), riid, ppv);
-    if(SUCCEEDED(hres)) {
-        SHDOCVW_LockModule();
-    }else {
-        heap_free(ret);
-        return hres;
-    }
 
+    IWebBrowser2_Release(WEBBROWSER(ret));
     return hres;
 }
 




More information about the wine-cvs mailing list