Nikolay Sivov : oleaut32: Added PICTYPE_NONE and PICTYPE_UNINITIALIZED to IPicture::Render.

Alexandre Julliard julliard at winehq.org
Thu Dec 11 07:51:02 CST 2008


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

Author: Nikolay Sivov <bunglehead at gmail.com>
Date:   Wed Dec 10 15:08:47 2008 +0300

oleaut32: Added PICTYPE_NONE and PICTYPE_UNINITIALIZED to IPicture::Render.

---

 dlls/oleaut32/olepicture.c       |    8 +++++
 dlls/oleaut32/tests/olepicture.c |   65 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 73 insertions(+), 0 deletions(-)

diff --git a/dlls/oleaut32/olepicture.c b/dlls/oleaut32/olepicture.c
index 498ee53..bdce729 100644
--- a/dlls/oleaut32/olepicture.c
+++ b/dlls/oleaut32/olepicture.c
@@ -637,6 +637,10 @@ static HRESULT WINAPI OLEPictureImpl_Render(IPicture *iface, HDC hdc,
     TRACE("prcWBounds (%d,%d) - (%d,%d)\n", prcWBounds->left, prcWBounds->top,
 	  prcWBounds->right, prcWBounds->bottom);
 
+  if(cx == 0 || cy == 0 || cxSrc == 0 || cySrc == 0){
+    return CTL_E_INVALIDPROPERTYVALUE;
+  }
+
   /*
    * While the documentation suggests this to be here (or after rendering?)
    * it does cause an endless recursion in my sample app. -MM 20010804
@@ -644,6 +648,10 @@ static HRESULT WINAPI OLEPictureImpl_Render(IPicture *iface, HDC hdc,
    */
 
   switch(This->desc.picType) {
+  case PICTYPE_UNINITIALIZED:
+  case PICTYPE_NONE:
+    /* nothing to do */
+    return S_OK;
   case PICTYPE_BITMAP:
     {
       HBITMAP hbmpOld;
diff --git a/dlls/oleaut32/tests/olepicture.c b/dlls/oleaut32/tests/olepicture.c
index f81c419..89e99dd 100644
--- a/dlls/oleaut32/tests/olepicture.c
+++ b/dlls/oleaut32/tests/olepicture.c
@@ -25,6 +25,7 @@
 #include <float.h>
 
 #define COBJMACROS
+#define NONAMELESSUNION
 
 #include "wine/test.h"
 #include <windef.h>
@@ -587,6 +588,69 @@ static void test_enhmetafile(void)
     GlobalFree(hglob);
 }
 
+static void test_Render(void)
+{
+    IPicture *pic;
+    HRESULT hres;
+    short type;
+    PICTDESC desc;
+    HDC hdc = GetDC(0);
+
+    /* test IPicture::Render return code on uninitialized picture */
+    OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (VOID**)&pic);
+    hres = IPicture_get_Type(pic, &type);
+    ok(hres == S_OK, "IPicture_get_Type does not return S_OK, but 0x%08x\n", hres);
+    ok(type == PICTYPE_UNINITIALIZED, "Expected type = PICTYPE_UNINITIALIZED, got = %d\n", type);
+    /* zero dimensions */
+    hres = IPicture_Render(pic, hdc, 0, 0, 0, 0, 0, 0, 0, 0, NULL);
+    ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
+    hres = IPicture_Render(pic, hdc, 0, 0, 10, 10, 0, 0, 10, 0, NULL);
+    ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
+    hres = IPicture_Render(pic, hdc, 0, 0, 10, 10, 0, 0, 0, 10, NULL);
+    ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
+    hres = IPicture_Render(pic, hdc, 0, 0, 10, 10, 0, 0, 0, 0, NULL);
+    ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
+    hres = IPicture_Render(pic, hdc, 0, 0, 0, 10, 0, 0, 10, 10, NULL);
+    ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
+    hres = IPicture_Render(pic, hdc, 0, 0, 10, 0, 0, 0, 10, 10, NULL);
+    ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
+    hres = IPicture_Render(pic, hdc, 0, 0, 0, 0, 0, 0, 10, 10, NULL);
+    ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
+    /* nonzero dimensions, PICTYPE_UNINITIALIZED */
+    hres = IPicture_Render(pic, hdc, 0, 0, 10, 10, 0, 0, 10, 10, NULL);
+    ole_expect(hres, S_OK);
+    IPicture_Release(pic);
+
+    desc.cbSizeofstruct = sizeof(PICTDESC);
+    desc.picType = PICTYPE_ICON;
+    desc.u.icon.hicon = LoadIcon(NULL, IDI_APPLICATION);
+    if(!desc.u.icon.hicon){
+        win_skip("LoadIcon failed. Skipping...\n");
+        ReleaseDC(NULL, hdc);
+        return;
+    }
+
+    OleCreatePictureIndirect(&desc, &IID_IPicture, TRUE, (VOID**)&pic);
+    /* zero dimensions, PICTYPE_ICON */
+    hres = IPicture_Render(pic, hdc, 0, 0, 0, 0, 0, 0, 0, 0, NULL);
+    ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
+    hres = IPicture_Render(pic, hdc, 0, 0, 10, 10, 0, 0, 10, 0, NULL);
+    ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
+    hres = IPicture_Render(pic, hdc, 0, 0, 10, 10, 0, 0, 0, 10, NULL);
+    ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
+    hres = IPicture_Render(pic, hdc, 0, 0, 10, 10, 0, 0, 0, 0, NULL);
+    ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
+    hres = IPicture_Render(pic, hdc, 0, 0, 0, 10, 0, 0, 10, 10, NULL);
+    ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
+    hres = IPicture_Render(pic, hdc, 0, 0, 10, 0, 0, 0, 10, 10, NULL);
+    ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
+    hres = IPicture_Render(pic, hdc, 0, 0, 0, 0, 0, 0, 10, 10, NULL);
+    ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
+    IPicture_Release(pic);
+
+    ReleaseDC(NULL, hdc);
+}
+
 START_TEST(olepicture)
 {
 	hOleaut32 = GetModuleHandleA("oleaut32.dll");
@@ -613,6 +677,7 @@ START_TEST(olepicture)
 
 	test_Invoke();
         test_OleCreatePictureIndirect();
+        test_Render();
 }
 
 




More information about the wine-cvs mailing list