cryptui: Fix crash with native riched20.
authorJuan Lang <juan.lang@gmail.com>
Fri, 9 Jan 2009 05:06:34 +0000 (21:06 -0800)
committerAlexandre Julliard <julliard@winehq.org>
Fri, 9 Jan 2009 13:48:36 +0000 (14:48 +0100)
dlls/cryptui/main.c

index 1abeff4a146f5206dddcebbb72fb323022811634..a5fb5808b4f592d5d1d6a86bc95bd2daf84be73c 100644 (file)
@@ -1666,6 +1666,7 @@ static void add_icon_to_control(HWND hwnd, int id)
     HBITMAP bitmap = NULL;
     RECT rect;
     STGMEDIUM stgm;
+    LPOLECLIENTSITE clientSite = NULL;
     REOBJECT reObject;
 
     TRACE("(%p, %d)\n", hwnd, id);
@@ -1693,6 +1694,9 @@ static void add_icon_to_control(HWND hwnd, int id)
         goto end;
     hr = IOleObject_QueryInterface(object, &IID_IDataObject,
      (void**)&dataObject);
+    if (FAILED(hr))
+        goto end;
+    hr = IRichEditOle_GetClientSite(richEditOle, &clientSite);
     if (FAILED(hr))
         goto end;
     bitmap = LoadImageW(hInstance, MAKEINTRESOURCEW(id), IMAGE_BITMAP, 0, 0,
@@ -1714,7 +1718,7 @@ static void add_icon_to_control(HWND hwnd, int id)
     reObject.clsid = clsid;
     reObject.poleobj = object;
     reObject.pstg = NULL;
-    reObject.polesite = NULL;
+    reObject.polesite = clientSite;
     reObject.sizel.cx = reObject.sizel.cy = 0;
     reObject.dvaspect = DVASPECT_CONTENT;
     reObject.dwFlags = 0;
@@ -1723,6 +1727,8 @@ static void add_icon_to_control(HWND hwnd, int id)
     IRichEditOle_InsertObject(richEditOle, &reObject);
 
 end:
+    if (clientSite)
+        IOleClientSite_Release(clientSite);
     if (dataObject)
         IDataObject_Release(dataObject);
     if (oleCache)