Module: wine Branch: master Commit: 31b3071552b92fcd03988ee97764eb6249b80f57 URL: http://source.winehq.org/git/wine.git/?a=commit;h=31b3071552b92fcd03988ee977... Author: Jacek Caban <jacek(a)codeweavers.com> Date: Thu Oct 2 16:23:15 2008 +0200 jscript: Fixed backslash handling in regular expressions. --- dlls/jscript/lex.c | 6 ++++-- dlls/jscript/tests/regexp.js | 8 +++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/dlls/jscript/lex.c b/dlls/jscript/lex.c index 4ad9fe5..93397a3 100644 --- a/dlls/jscript/lex.c +++ b/dlls/jscript/lex.c @@ -709,8 +709,10 @@ literal_t *parse_regexp(parser_ctx_t *ctx) TRACE("\n"); re = ctx->ptr; - while(ctx->ptr < ctx->end && (*ctx->ptr != '/' || *(ctx->ptr-1) == '\\')) - ctx->ptr++; + while(ctx->ptr < ctx->end && *ctx->ptr != '/') { + if(*ctx->ptr++ == '\\' && ctx->ptr < ctx->end) + ctx->ptr++; + } if(ctx->ptr == ctx->end) { WARN("unexpected end of file\n"); diff --git a/dlls/jscript/tests/regexp.js b/dlls/jscript/tests/regexp.js index a5be6ac..e797723 100644 --- a/dlls/jscript/tests/regexp.js +++ b/dlls/jscript/tests/regexp.js @@ -47,10 +47,16 @@ ok(m["1"] === "ab", "m[1] is not \"ab\""); m = "aaabcabc".match(/a+b/g); ok(typeof(m) === "object", "typeof m is not object"); -ok(m.length === 2, "m.length is not 1"); +ok(m.length === 2, "m.length is not 2"); ok(m["0"] === "aaab", "m[0] is not \"ab\""); ok(m["1"] === "ab", "m[1] is not \"ab\""); +m = "aaa\\\\cabc".match(/\\/g); +ok(typeof(m) === "object", "typeof m is not object"); +ok(m.length === 2, "m.length is not 2"); +ok(m["0"] === "\\", "m[0] is not \"\\\""); +ok(m["1"] === "\\", "m[1] is not \"\\\""); + m = "abcabc".match(new RegExp("ab")); ok(typeof(m) === "object", "typeof m is not object"); ok(m.length === 1, "m.length is not 1");