[PATCH] vbscript: Emit catch after next in for each loops.
Robert Wilhelm
robert.wilhelm at gmx.net
Sat Oct 9 04:46:39 CDT 2021
Hi Jacek,
We crash in following testcase:
On Error Resume Next
For each i in empty
Next
There is no catch after next but we search for it until we hit unaccessible memory.
Please see bugreport for details.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=39463
Signed-off-by: Robert Wilhelm <robert.wilhelm at gmx.net>
---
dlls/vbscript/compile.c | 4 ++++
dlls/vbscript/tests/error.vbs | 5 ++++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/dlls/vbscript/compile.c b/dlls/vbscript/compile.c
index da56eac74b2..8eb1878ec05 100644
--- a/dlls/vbscript/compile.c
+++ b/dlls/vbscript/compile.c
@@ -829,6 +829,10 @@ static HRESULT compile_foreach_statement(compile_ctx_t *ctx, foreach_statement_t
return hres;
label_set_addr(ctx, loop_ctx.for_end_label);
+
+ if(!emit_catch(ctx, 0))
+ return E_OUTOFMEMORY;
+
return S_OK;
}
diff --git a/dlls/vbscript/tests/error.vbs b/dlls/vbscript/tests/error.vbs
index 1853f6c4bf5..9b74dc8773e 100644
--- a/dlls/vbscript/tests/error.vbs
+++ b/dlls/vbscript/tests/error.vbs
@@ -309,12 +309,15 @@ call ok(x = "ok", "testOnErrorClear failed")
sub testForEachError()
on error resume next
- dim x, y
+ dim x, y, z
y = false
+ z = false
for each x in empty
y = true
next
+ z = true
call ok(y, "for each not executed")
+ call ok(z, "line after next not executed")
call todo_wine_ok(Err.Number = VB_E_OBJNOTCOLLECTION, "Err.Number = " & Err.Number)
end sub
--
2.31.1
More information about the wine-devel
mailing list