tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

RegExp-control-escape-russian-letter.js (1619B)


      1 // Copyright 2009 the Sputnik authors.  All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 
      4 /*---
      5 info: "CharacterEscape :: c ControlLetter"
      6 es5id: 15.10.2.10_A2.1_T3
      7 es6id: B.1.4
      8 description: >
      9  "ControlLetter :: RUSSIAN ALPHABET is incorrect"
     10  Instead, fall back to semantics to match literal "\\c"
     11 features: [generators]
     12 ---*/
     13 
     14 function* invalidControls() {
     15  // Check upper case Cyrillic
     16  for (var alpha = 0x0410; alpha <= 0x042F; alpha++) {
     17    yield String.fromCharCode(alpha);
     18  }
     19 
     20  // Check lower case Cyrillic
     21  for (alpha = 0x0430; alpha <= 0x044F; alpha++) {
     22    yield String.fromCharCode(alpha);
     23  }
     24 
     25  // Check ASCII characters which are not in the extended range or syntax
     26  // characters
     27  for (alpha = 0x00; alpha <= 0x7F; alpha++) {
     28    let letter = String.fromCharCode(alpha);
     29    if (!letter.match(/[0-9A-Za-z_\$(|)\[\]\/\\^]/)) {
     30      yield letter;
     31    }
     32  }
     33 
     34  // Check for end of string
     35  yield "";
     36 }
     37 
     38 for (let letter of invalidControls()) {
     39  var source = "\\c" + letter;
     40  var re = new RegExp(source);
     41 
     42  if (letter.length > 0) {
     43    var char = letter.charCodeAt(0);
     44    var str = String.fromCharCode(char % 32);
     45    var arr = re.exec(str);
     46    assert.sameValue(arr, null, `Character ${letter} unreasonably wrapped around as a control character`);
     47  }
     48  arr = re.exec(source.substring(1));
     49  assert.sameValue(arr, null, `invalid \\c escape matched c rather than \\c when followed by ${letter}`);
     50 
     51  arr = re.exec(source);
     52  assert.notSameValue(arr, null, `invalid \\c escape failed to match \\c when followed by ${letter}`);
     53 }
     54 
     55 reportCompare(0, 0);