From: Francis De Brabandere <francisdb@gmail.com> When a class member is declared with explicit bounds (Private mArr(N) or Public mArr(N)) the SAFEARRAY created at instance construction was missing FADF_FIXEDSIZE, so interp_redim's fixed-size guard silently accepted a later ReDim from a method body. Set the flag (and FADF_STATIC) to match interp_dim's handling of local fixed-size arrays, so ReDim raises err 10 like native. --- dlls/vbscript/tests/lang.vbs | 6 +++--- dlls/vbscript/vbdisp.c | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dlls/vbscript/tests/lang.vbs b/dlls/vbscript/tests/lang.vbs index 6c8d5c22b6c..4607a3e5952 100644 --- a/dlls/vbscript/tests/lang.vbs +++ b/dlls/vbscript/tests/lang.vbs @@ -2843,13 +2843,13 @@ End Class dim cFix : Set cFix = New FixedClassArr cFix.Resize 5 -todo_wine_ok cFix.LastErr = 10, "ReDim fixed class member err = " & cFix.LastErr +call ok(cFix.LastErr = 10, "ReDim fixed class member err = " & cFix.LastErr) cFix.ResizePreserve 5 -todo_wine_ok cFix.LastErr = 10, "ReDim Preserve fixed class member err = " & cFix.LastErr +call ok(cFix.LastErr = 10, "ReDim Preserve fixed class member err = " & cFix.LastErr) dim cFix2D : Set cFix2D = New FixedClassArr2D cFix2D.Resize 5, 7 -todo_wine_ok cFix2D.LastErr = 10, "ReDim fixed 2D class member err = " & cFix2D.LastErr +call ok(cFix2D.LastErr = 10, "ReDim fixed 2D class member err = " & cFix2D.LastErr) dim cDyn : Set cDyn = New DynamicClassArr cDyn.Resize 5 diff --git a/dlls/vbscript/vbdisp.c b/dlls/vbscript/vbdisp.c index 1ea228c8aca..554d410b57e 100644 --- a/dlls/vbscript/vbdisp.c +++ b/dlls/vbscript/vbdisp.c @@ -741,6 +741,7 @@ HRESULT create_vbdisp(const class_desc_t *desc, vbdisp_t **ret) hres = E_OUTOFMEMORY; break; } + vbdisp->arrays[i]->fFeatures |= FADF_FIXEDSIZE | FADF_STATIC; } if(SUCCEEDED(hres)) { -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10927