Jacek Caban : jscript: Correctly handle empty matches in String.replace.

Alexandre Julliard julliard at winehq.org
Wed Apr 18 13:04:13 CDT 2012


Module: wine
Branch: master
Commit: c1cb8f29b022ca1a1cf9da560f70d4b83337a9de
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c1cb8f29b022ca1a1cf9da560f70d4b83337a9de

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Apr 18 13:50:19 2012 +0200

jscript: Correctly handle empty matches in String.replace.

---

 dlls/jscript/string.c        |    3 +++
 dlls/jscript/tests/regexp.js |    9 +++++++++
 2 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c
index 17f6c2f..e8b279c 100644
--- a/dlls/jscript/string.c
+++ b/dlls/jscript/string.c
@@ -868,6 +868,9 @@ static HRESULT String_replace(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DI
                 }
                 if(FAILED(hres))
                     break;
+
+                if(!match.len)
+                    cp++;
             }else {
                 match.str = strstrW(cp, match_str);
                 if(!match.str)
diff --git a/dlls/jscript/tests/regexp.js b/dlls/jscript/tests/regexp.js
index c7f9363..d553bb6 100644
--- a/dlls/jscript/tests/regexp.js
+++ b/dlls/jscript/tests/regexp.js
@@ -583,4 +583,13 @@ ok(i === null, "' undefined '.search() = " + i);
 tmp = "=)".replace(/=/, "?");
 ok(tmp === "?)", "'=)'.replace(/=/, '?') = " + tmp);
 
+tmp = "   ".replace(/^\s*|\s*$/g, "y");
+ok(tmp === "yy", '"   ".replace(/^\s*|\s*$/g, "y") = ' + tmp);
+
+tmp = "xxx".replace(/^\s*|\s*$/g, "");
+ok(tmp === "xxx", '"xxx".replace(/^\s*|\s*$/g, "y") = ' + tmp);
+
+tmp = "xxx".replace(/^\s*|\s*$/g, "y");
+ok(tmp === "yxxxy", '"xxx".replace(/^\s*|\s*$/g, "y") = ' + tmp);
+
 reportSuccess();




More information about the wine-cvs mailing list