Fix old bogus static dollarStr thread-safety bug (142651, r=jband, sr=shaver).

git-svn-id: svn://10.0.0.236/trunk@120923 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
brendan%mozilla.org
2002-05-07 08:29:39 +00:00
parent 4f04c8286c
commit b39de47648

View File

@@ -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 '+':