Nikolay Sivov : riched20: Return 0x0 size for NULL objects.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jun 3 09:43:08 CDT 2015


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Tue Jun  2 17:26:15 2015 +0300

riched20: Return 0x0 size for NULL objects.

---

 dlls/riched20/richole.c       | 10 ++++++++++
 dlls/riched20/tests/richole.c | 37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+)

diff --git a/dlls/riched20/richole.c b/dlls/riched20/richole.c
index f3a4a01..7af3ae2 100644
--- a/dlls/riched20/richole.c
+++ b/dlls/riched20/richole.c
@@ -1420,8 +1420,12 @@ static HRESULT WINAPI
 IRichEditOle_fnInsertObject(IRichEditOle *me, REOBJECT *reo)
 {
     IRichEditOleImpl *This = impl_from_IRichEditOle(me);
+
     TRACE("(%p,%p)\n", This, reo);
 
+    if (!reo)
+        return E_INVALIDARG;
+
     if (reo->cbStruct < sizeof(*reo)) return STG_E_INVALIDPARAMETER;
 
     ME_InsertOLEFromCursor(This->editor, reo, 0);
@@ -5037,6 +5041,12 @@ void ME_GetOLEObjectSize(const ME_Context *c, ME_Run *run, SIZE *pSize)
     return;
   }
 
+  if (!run->ole_obj->poleobj)
+  {
+    pSize->cx = pSize->cy = 0;
+    return;
+  }
+
   if (IOleObject_QueryInterface(run->ole_obj->poleobj, &IID_IDataObject, (void**)&ido) != S_OK)
   {
       FIXME("Query Interface IID_IDataObject failed!\n");
diff --git a/dlls/riched20/tests/richole.c b/dlls/riched20/tests/richole.c
index 318b386..101896e 100644
--- a/dlls/riched20/tests/richole.c
+++ b/dlls/riched20/tests/richole.c
@@ -3072,6 +3072,42 @@ static void test_SetFont(void)
   ITextSelection_Release(selection);
 }
 
+static void test_InsertObject(void)
+{
+  IRichEditOle *reole = NULL;
+  ITextDocument *doc = NULL;
+  IOleClientSite *clientsite;
+  REOBJECT reo;
+  HRESULT hr;
+  HWND hwnd;
+
+  create_interfaces(&hwnd, &reole, &doc, NULL);
+
+  hr = IRichEditOle_InsertObject(reole, NULL);
+  ok(hr == E_INVALIDARG, "got 0x%08x\n", hr);
+
+  hr = IRichEditOle_GetClientSite(reole, &clientsite);
+  ok(hr == S_OK, "got 0x%08x\n", hr);
+
+  reo.cbStruct = sizeof(reo);
+  reo.cp = 0;
+  memset(&reo.clsid, 0, sizeof(reo.clsid));
+  reo.poleobj = NULL;
+  reo.pstg = NULL;
+  reo.polesite = clientsite;
+  reo.sizel.cx = 10;
+  reo.sizel.cy = 10;
+  reo.dvaspect = DVASPECT_CONTENT;
+  reo.dwFlags = 0;
+  reo.dwUser = 0;
+
+  hr = IRichEditOle_InsertObject(reole, &reo);
+  ok(hr == S_OK, "got 0x%08x\n", hr);
+
+  IOleClientSite_Release(clientsite);
+  release_interfaces(&hwnd, &reole, &doc, NULL);
+}
+
 START_TEST(richole)
 {
   /* Must explicitly LoadLibrary(). The test has no references to functions in
@@ -3104,4 +3140,5 @@ START_TEST(richole)
   test_Select();
   test_GetStoryType();
   test_SetFont();
+  test_InsertObject();
 }




More information about the wine-cvs mailing list