diff --git a/dlls/vbscript/tests/regexp.vbs b/dlls/vbscript/tests/regexp.vbs index 0354fb77f44..834be2101cf 100644 --- a/dlls/vbscript/tests/regexp.vbs +++ b/dlls/vbscript/tests/regexp.vbs @@ -174,4 +174,21 @@ Call ok(x.IgnoreCase = false, "RegExp.IgnoreCase = " & x.IgnoreCase) Call ok(x.Global = false, "RegExp.Global = " & x.Global) Call ok(x.Multiline = false, "RegExp.Multiline = " & x.Multiline) +set matches = x.execute("test") +Call ok(matches.Count = 1, "matches.Count = " & matches.Count) +x.pattern = "" +set matches = x.execute("test") +Call ok(matches.Count = 1, "matches.Count = " & matches.Count) +set match = matches.item(0) +Call ok(match.Value = "", "match.Value = " & match.Value) +x.global = true +set matches = x.execute("test") +Call ok(matches.Count = 5, "matches.Count = " & matches.Count) +set match = matches.item(0) +Call ok(match.Value = "", "match.Value = " & match.Value) +set match = matches.item(4) +Call ok(match.Value = "", "match.Value = " & match.Value) +matches = x.test("test") +Call ok(matches = true, "matches = " & matches) + Call reportSuccess() diff --git a/dlls/vbscript/vbregexp.c b/dlls/vbscript/vbregexp.c index 0a399b98525..800ea5e74f4 100644 --- a/dlls/vbscript/vbregexp.c +++ b/dlls/vbscript/vbregexp.c @@ -1189,29 +1189,23 @@ static HRESULT WINAPI RegExp2_get_Pattern(IRegExp2 *iface, BSTR *pPattern) static HRESULT WINAPI RegExp2_put_Pattern(IRegExp2 *iface, BSTR pattern) { RegExp2 *This = impl_from_IRegExp2(iface); - WCHAR *p; - DWORD size; + WCHAR *new_pattern; TRACE("(%p)->(%s)\n", This, wine_dbgstr_w(pattern)); - if(!pattern) { - heap_free(This->pattern); - if(This->regexp) { - regexp_destroy(This->regexp); - This->regexp = NULL; - } - This->pattern = NULL; - return S_OK; + if(pattern && *pattern) { + SIZE_T size = (SysStringLen(pattern)+1) * sizeof(WCHAR); + new_pattern = heap_alloc(size); + if(!new_pattern) + return E_OUTOFMEMORY; + memcpy(new_pattern, pattern, size); + }else { + new_pattern = NULL; } - size = (SysStringLen(pattern)+1) * sizeof(WCHAR); - p = heap_alloc(size); - if(!p) - return E_OUTOFMEMORY; - heap_free(This->pattern); - This->pattern = p; - memcpy(p, pattern, size); + This->pattern = new_pattern; + if(This->regexp) { regexp_destroy(This->regexp); This->regexp = NULL;