vbscript: Treat empty regexp pattern the same way as NULL pattern.

This commit is contained in:
Jacek Caban 2015-06-29 11:55:56 +02:00 committed by Alexandre Julliard
parent e27a13e3a2
commit 392736c5e8
2 changed files with 28 additions and 17 deletions

View File

@ -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.Global = false, "RegExp.Global = " & x.Global)
Call ok(x.Multiline = false, "RegExp.Multiline = " & x.Multiline) 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() Call reportSuccess()

View File

@ -1189,29 +1189,23 @@ static HRESULT WINAPI RegExp2_get_Pattern(IRegExp2 *iface, BSTR *pPattern)
static HRESULT WINAPI RegExp2_put_Pattern(IRegExp2 *iface, BSTR pattern) static HRESULT WINAPI RegExp2_put_Pattern(IRegExp2 *iface, BSTR pattern)
{ {
RegExp2 *This = impl_from_IRegExp2(iface); RegExp2 *This = impl_from_IRegExp2(iface);
WCHAR *p; WCHAR *new_pattern;
DWORD size;
TRACE("(%p)->(%s)\n", This, wine_dbgstr_w(pattern)); TRACE("(%p)->(%s)\n", This, wine_dbgstr_w(pattern));
if(!pattern) { if(pattern && *pattern) {
heap_free(This->pattern); SIZE_T size = (SysStringLen(pattern)+1) * sizeof(WCHAR);
if(This->regexp) { new_pattern = heap_alloc(size);
regexp_destroy(This->regexp); if(!new_pattern)
This->regexp = NULL; return E_OUTOFMEMORY;
} memcpy(new_pattern, pattern, size);
This->pattern = NULL; }else {
return S_OK; new_pattern = NULL;
} }
size = (SysStringLen(pattern)+1) * sizeof(WCHAR);
p = heap_alloc(size);
if(!p)
return E_OUTOFMEMORY;
heap_free(This->pattern); heap_free(This->pattern);
This->pattern = p; This->pattern = new_pattern;
memcpy(p, pattern, size);
if(This->regexp) { if(This->regexp) {
regexp_destroy(This->regexp); regexp_destroy(This->regexp);
This->regexp = NULL; This->regexp = NULL;