Ignore:
Timestamp:
Jun 5, 2006, 10:59:43 PM (19 years ago)
Author:
ggaren
Message:

Reviewed and landed by Geoff.

  • fix a regression in ecma_3/String/regress-104375.js
  • kjs/string_object.cpp: (substituteBackreferences): If a 2-digit back reference is out of range, parse it as a 1-digit reference (followed by the other digit). This matches Firefox's behavior.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/string_object.cpp

    r14705 r14742  
    258258        // 1- and 2-digit back references are allowed
    259259        unsigned backrefIndex = ref - '0';
     260        if (backrefIndex > (unsigned)reg->subPatterns())
     261            continue;
    260262        if (substitutedReplacement.size() > i + 2) {
    261263            ref = substitutedReplacement[i+2].unicode();
    262264            if (ref >= '0' && ref <= '9') {
    263265                backrefIndex = 10 * backrefIndex + ref - '0';
    264                 advance = 1;
     266                if (backrefIndex > (unsigned)reg->subPatterns())
     267                    backrefIndex = backrefIndex / 10;   // Fall back to the 1-digit reference
     268                else
     269                    advance = 1;
    265270            }
    266         }
    267         if (backrefIndex > (unsigned)reg->subPatterns()) {
    268             i += advance;
    269             continue;
    270271        }
    271272        backrefStart = ovector[2 * backrefIndex];
Note: See TracChangeset for help on using the changeset viewer.