diff --git a/mozilla/js/src/jsstr.c b/mozilla/js/src/jsstr.c index 1c4f9102680..6b31301ae7b 100644 --- a/mozilla/js/src/jsstr.c +++ b/mozilla/js/src/jsstr.c @@ -1203,10 +1203,9 @@ typedef struct ReplaceData { size_t length; /* result length, 0 initially */ jsint index; /* index in result of next replacement */ jsint leftIndex; /* left context index in base.str->chars */ + JSSubString dollarStr; /* for "$$" interpret_dollar result */ } ReplaceData; -static JSSubString dollarStr; - static JSSubString * interpret_dollar(JSContext *cx, jschar *dp, ReplaceData *rdata, size_t *skip) { @@ -1218,12 +1217,13 @@ interpret_dollar(JSContext *cx, jschar *dp, ReplaceData *rdata, size_t *skip) JS_ASSERT(*dp == '$'); /* - * Allow a real backslash (literal "\\") to escape "$1" etc. + * Allow a real backslash (literal "\\" before "$1") to escape "$1", e.g. * Do this for versions less than 1.5 (ECMA 3) only */ - if (cx->version != JSVERSION_DEFAULT && cx->version <= JSVERSION_1_4) + if (cx->version != JSVERSION_DEFAULT && cx->version <= JSVERSION_1_4) { if (dp > JSSTRING_CHARS(rdata->repstr) && dp[-1] == '\\') return NULL; + } /* Interpret all Perl match-induced dollar variables. */ res = &cx->regExpStatics; @@ -1267,9 +1267,9 @@ interpret_dollar(JSContext *cx, jschar *dp, ReplaceData *rdata, size_t *skip) *skip = 2; switch (dc) { case '$': - dollarStr.chars = dp; - dollarStr.length = 1; - return &dollarStr; + rdata->dollarStr.chars = dp; + rdata->dollarStr.length = 1; + return &rdata->dollarStr; case '&': return &res->lastMatch; case '+':