Rob Shearman : ole32: Fix cbStruct handling in IBindCtx:GetBindOptions.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Mar 9 07:28:27 CST 2007


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

Author: Rob Shearman <rob at codeweavers.com>
Date:   Fri Mar  9 09:47:43 2007 +0000

ole32: Fix cbStruct handling in IBindCtx:GetBindOptions.

---

 dlls/ole32/bindctx.c       |   10 +++++++---
 dlls/ole32/tests/moniker.c |    1 -
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/dlls/ole32/bindctx.c b/dlls/ole32/bindctx.c
index dc25b25..464d02e 100644
--- a/dlls/ole32/bindctx.c
+++ b/dlls/ole32/bindctx.c
@@ -267,16 +267,20 @@ static HRESULT WINAPI
 BindCtxImpl_GetBindOptions(IBindCtx* iface,BIND_OPTS *pbindopts)
 {
     BindCtxImpl *This = (BindCtxImpl *)iface;
+    ULONG cbStruct;
 
     TRACE("(%p,%p)\n",This,pbindopts);
 
     if (pbindopts==NULL)
         return E_POINTER;
 
-    if (pbindopts->cbStruct > sizeof(BIND_OPTS2))
-        pbindopts->cbStruct = sizeof(BIND_OPTS2);
+    cbStruct = pbindopts->cbStruct;
+    if (cbStruct > sizeof(BIND_OPTS2))
+        cbStruct = sizeof(BIND_OPTS2);
+
+    memcpy(pbindopts, &This->bindOption2, cbStruct);
+    pbindopts->cbStruct = cbStruct;
 
-    memcpy(pbindopts, &This->bindOption2, pbindopts->cbStruct);
     return S_OK;
 }
 
diff --git a/dlls/ole32/tests/moniker.c b/dlls/ole32/tests/moniker.c
index cca2f67..6b8a35a 100644
--- a/dlls/ole32/tests/moniker.c
+++ b/dlls/ole32/tests/moniker.c
@@ -1466,7 +1466,6 @@ static void test_bind_context(void)
     bind_opts.cbStruct = sizeof(BIND_OPTS);
     hr = IBindCtx_GetBindOptions(pBindCtx, (BIND_OPTS *)&bind_opts);
     ok_ole_success(hr, "IBindCtx_GetBindOptions");
-    todo_wine
     ok(bind_opts.cbStruct == sizeof(BIND_OPTS), "bind_opts.cbStruct was %d\n", bind_opts.cbStruct);
 
     bind_opts.cbStruct = sizeof(bind_opts);




More information about the wine-cvs mailing list