Jacek Caban : vbscript: Lookup this object in lookup_identifier only if it's an actual VBScript object.

Alexandre Julliard julliard at winehq.org
Tue Nov 5 16:11:44 CST 2019


Module: wine
Branch: master
Commit: 3c366be35384790713d9cc5e06ab28dcda5bf50f
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3c366be35384790713d9cc5e06ab28dcda5bf50f

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Nov  5 14:08:47 2019 +0100

vbscript: Lookup this object in lookup_identifier only if it's an actual VBScript object.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/vbscript/interp.c    | 14 +++++++-------
 dlls/vbscript/tests/run.c |  6 ++++++
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/dlls/vbscript/interp.c b/dlls/vbscript/interp.c
index 4800ae7ce6..a74c6c320e 100644
--- a/dlls/vbscript/interp.c
+++ b/dlls/vbscript/interp.c
@@ -139,14 +139,14 @@ static HRESULT lookup_identifier(exec_ctx_t *ctx, BSTR name, vbdisp_invoke_type_
                     return S_OK;
                 }
             }
-        }
 
-        hres = disp_get_id(ctx->this_obj, name, invoke_type, TRUE, &id);
-        if(SUCCEEDED(hres)) {
-            ref->type = REF_DISP;
-            ref->u.d.disp = ctx->this_obj;
-            ref->u.d.id = id;
-            return S_OK;
+            hres = vbdisp_get_id(ctx->vbthis, name, invoke_type, TRUE, &id);
+            if(SUCCEEDED(hres)) {
+                ref->type = REF_DISP;
+                ref->u.d.disp = (IDispatch*)&ctx->vbthis->IDispatchEx_iface;
+                ref->u.d.id = id;
+                return S_OK;
+            }
         }
     }
 
diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c
index 9ed1096a4d..707fd89493 100644
--- a/dlls/vbscript/tests/run.c
+++ b/dlls/vbscript/tests/run.c
@@ -3025,6 +3025,12 @@ static void run_tests(void)
     parse_script_a("testOptionalArg 1,,2");
     CHECK_CALLED(global_testoptionalarg_i);
 
+    parse_script_a("sub x()\n"
+                   "    dim y\n"
+                   "    y = cint(3)\n"
+                   "end sub\n"
+                   "x\n");
+
     strict_dispid_check = FALSE;
 
     SET_EXPECT(testobj_value_i);




More information about the wine-cvs mailing list