Browse Source

deps: cherry-pick a51f429 from V8 upstream

Original commit message:
  [regexp] Fix case-insensitive matching for one-byte subjects.

  The bug occurs because we do not canonicalize character class ranges
  before adding case equivalents. While adding case equivalents, we abort
  early for one-byte subject strings, assuming that the ranges are sorted.
  Which they are not.

  R=marja@chromium.org
  BUG=v8:5199

  Review-Url: https://codereview.chromium.org/2159683002
  Cr-Commit-Position: refs/heads/master@{#37833}

Fixes: https://github.com/nodejs/node/issues/7708
PR-URL: https://github.com/nodejs/node/pull/7833
Reviewed-By: targos - Michaël Zasso <mic.besace@gmail.com>
Reviewed-By: bnoordhuis - Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: ofrobots - Ali Ijaz Sheikh <ofrobots@google.com>
v7.x
Franziska Hinkelmann 9 years ago
committed by Ali Ijaz Sheikh
parent
commit
60d46b4e70
  1. 2
      deps/v8/include/v8-version.h
  2. 1
      deps/v8/src/regexp/jsregexp.cc
  3. 5
      deps/v8/test/mjsunit/regress/regress-5199.js

2
deps/v8/include/v8-version.h

@ -11,7 +11,7 @@
#define V8_MAJOR_VERSION 5 #define V8_MAJOR_VERSION 5
#define V8_MINOR_VERSION 1 #define V8_MINOR_VERSION 1
#define V8_BUILD_NUMBER 281 #define V8_BUILD_NUMBER 281
#define V8_PATCH_LEVEL 77 #define V8_PATCH_LEVEL 78
// Use 1 for candidates and 0 otherwise. // Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.) // (Boolean macro values are not supported by all preprocessors.)

1
deps/v8/src/regexp/jsregexp.cc

@ -5879,6 +5879,7 @@ Vector<const int> CharacterRange::GetWordBounds() {
void CharacterRange::AddCaseEquivalents(Isolate* isolate, Zone* zone, void CharacterRange::AddCaseEquivalents(Isolate* isolate, Zone* zone,
ZoneList<CharacterRange>* ranges, ZoneList<CharacterRange>* ranges,
bool is_one_byte) { bool is_one_byte) {
CharacterRange::Canonicalize(ranges);
int range_count = ranges->length(); int range_count = ranges->length();
for (int i = 0; i < range_count; i++) { for (int i = 0; i < range_count; i++) {
CharacterRange range = ranges->at(i); CharacterRange range = ranges->at(i);

5
deps/v8/test/mjsunit/regress/regress-5199.js

@ -0,0 +1,5 @@
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
assertTrue(/(a[\u1000A])+/i.test('aa'));
Loading…
Cancel
Save