From 149f0d6f02f647165acf9cc6cdcd649b7b4ac498 Mon Sep 17 00:00:00 2001 From: "brendan%mozilla.org" Date: Fri, 14 Nov 2003 03:23:49 +0000 Subject: [PATCH] RegExp().toString and .toSource should return '/(?:)/', not '//' (bug 225550, r=sparky). git-svn-id: svn://10.0.0.236/trunk@149282 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/js/src/jsregexp.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/mozilla/js/src/jsregexp.c b/mozilla/js/src/jsregexp.c index 1cd9501683b..5474ebc50a9 100644 --- a/mozilla/js/src/jsregexp.c +++ b/mozilla/js/src/jsregexp.c @@ -3445,12 +3445,14 @@ JSClass js_RegExpClass = { regexp_xdrObject, NULL, regexp_mark, 0 }; +static const jschar empty_regexp_ucstr[] = {'(', '?', ':', ')', 0}; + static JSBool regexp_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { JSRegExp *re; - jschar *chars; + jschar *source, *chars; size_t length, nflags; uintN flags; JSString *str; @@ -3465,7 +3467,13 @@ regexp_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, return JS_TRUE; } - length = JSSTRING_LENGTH(re->source) + 2; + source = JSSTRING_CHARS(re->source); + length = JSSTRING_LENGTH(re->source); + if (length == 0) { + source = empty_regexp_ucstr; + length = sizeof(empty_regexp_ucstr) / sizeof(jschar) - 1; + } + length += 2; nflags = 0; for (flags = re->flags; flags != 0; flags &= flags - 1) nflags++; @@ -3476,7 +3484,7 @@ regexp_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, } chars[0] = '/'; - js_strncpy(&chars[1], JSSTRING_CHARS(re->source), length - 2); + js_strncpy(&chars[1], source, length - 2); chars[length-1] = '/'; if (nflags) { if (re->flags & JSREG_GLOB)