[PATCH] vbscript: Handle NULL code text in ParseScriptText and ParseProcedureText.
Gabriel Ivăncescu
gabrielopcode at gmail.com
Mon Sep 23 07:51:01 CDT 2019
Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
dlls/vbscript/compile.c | 3 +++
dlls/vbscript/tests/run.c | 9 +++++++++
2 files changed, 12 insertions(+)
diff --git a/dlls/vbscript/compile.c b/dlls/vbscript/compile.c
index 0527297..44919be 100644
--- a/dlls/vbscript/compile.c
+++ b/dlls/vbscript/compile.c
@@ -1815,6 +1815,7 @@ static void release_compiler(compile_ctx_t *ctx)
HRESULT compile_script(script_ctx_t *script, const WCHAR *src, const WCHAR *delimiter, DWORD flags, vbscode_t **ret)
{
+ static const WCHAR emptyW[] = { 0 };
function_t *new_func;
function_decl_t *func_decl;
class_decl_t *class_decl;
@@ -1822,6 +1823,8 @@ HRESULT compile_script(script_ctx_t *script, const WCHAR *src, const WCHAR *deli
vbscode_t *code;
HRESULT hres;
+ if (!src) src = emptyW;
+
hres = parse_script(&ctx.parser, src, delimiter, flags);
if(FAILED(hres))
return hres;
diff --git a/dlls/vbscript/tests/run.c b/dlls/vbscript/tests/run.c
index 8e51e3c..ebcc883 100644
--- a/dlls/vbscript/tests/run.c
+++ b/dlls/vbscript/tests/run.c
@@ -1917,6 +1917,10 @@ static void test_parse_context(void)
hres = IActiveScript_QueryInterface(engine, &IID_IActiveScriptParse, (void**)&parser);
ok(hres == S_OK, "Could not get IActiveScriptParse: %08x\n", hres);
+ /* NULL code text succeeds but does nothing */
+ hres = IActiveScriptParse_ParseScriptText(parser, NULL, NULL, NULL, NULL, 0, 0, 0, NULL, NULL);
+ ok(hres == S_OK, "ParseScriptText failed: %08x\n", hres);
+
/* unknown identifier context is not a valid argument */
str = a2bstr("Call reportSuccess()\n");
hres = IActiveScriptParse_ParseScriptText(parser, str, yW, NULL, NULL, 0, 0, 0, NULL, NULL);
@@ -2003,6 +2007,7 @@ static void test_procedures(void)
DISPPARAMS dp = {NULL};
IActiveScript *script;
IDispatchEx *proc;
+ IDispatch *disp;
EXCEPINFO ei = {0};
VARIANT v;
HRESULT hres;
@@ -2012,6 +2017,10 @@ static void test_procedures(void)
hres = IActiveScript_QueryInterface(script, &IID_IActiveScriptParseProcedure2, (void**)&parse_proc);
ok(hres == S_OK, "Could not get IActiveScriptParseProcedure2 iface: %08x\n", hres);
+ hres = IActiveScriptParseProcedure2_ParseProcedureText(parse_proc, NULL, NULL, emptyW, NULL, NULL, NULL, 0, 0, 0, &disp);
+ ok(hres == S_OK, "ParseProcedureText failed: %08x\n", hres);
+ IDispatch_Release(disp);
+
proc = parse_procedure(parse_proc, "dim x\nif true then x=false", 0);
V_VT(&v) = VT_EMPTY;
--
2.21.0
More information about the wine-devel
mailing list