From: Jacek Caban Subject: jscript: Fixed jsheap_grow implementation Message-Id: <4F75DD24.40808@codeweavers.com> Date: Fri, 30 Mar 2012 18:19:48 +0200 --- dlls/jscript/jsutils.c | 7 ++++++- dlls/jscript/tests/regexp.js | 4 ++++ 2 files changed, 10 insertions(+), 1 deletions(-) diff --git a/dlls/jscript/jsutils.c b/dlls/jscript/jsutils.c index 040ec58..5e5121a 100644 --- a/dlls/jscript/jsutils.c +++ b/dlls/jscript/jsutils.c @@ -126,13 +126,18 @@ void *jsheap_alloc(jsheap_t *heap, DWORD size) void *jsheap_grow(jsheap_t *heap, void *mem, DWORD size, DWORD inc) { + void *ret; + if(mem == (BYTE*)heap->blocks[heap->last_block] + heap->offset-size && heap->offset+inc < block_size(heap->last_block)) { heap->offset += inc; return mem; } - return jsheap_alloc(heap, size+inc); + ret = jsheap_alloc(heap, size+inc); + if(ret) /* FIXME: avoid coppying for custom blocks */ + memcpy(ret, mem, size); + return ret; } void jsheap_clear(jsheap_t *heap) diff --git a/dlls/jscript/tests/regexp.js b/dlls/jscript/tests/regexp.js index 4d513e0..e9f26ef 100644 --- a/dlls/jscript/tests/regexp.js +++ b/dlls/jscript/tests/regexp.js @@ -44,6 +44,10 @@ ok(m[0] === "aa", "m[0] = " + m[0]); ok(RegExp.leftContext === " ", "RegExp.leftContext = " + RegExp.leftContext); ok(RegExp.rightContext === "baaa", "RegExp.rightContext = " + RegExp.rightContext); +m = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/.exec( + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); +ok(m === null, "m is not null"); + re = /a+/g; ok(re.lastIndex === 0, "re.lastIndex = " + re.lastIndex);