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