tor-browser

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

regress-511859.js (3274B)


      1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /* This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 /*
      7 *
      8 * Date:    22 Aug 2009
      9 * SUMMARY: Utf8ToOneUcs4Char in jsstr.cpp ,overlong UTF-8 seqence detection problem
     10 * See http://bugzilla.mozilla.org/show_bug.cgi?id=511859
     11 *
     12 */
     13 //-----------------------------------------------------------------------------
     14 var UBound = 0;
     15 var BUGNUMBER = 511859;
     16 var summary = 'Utf8ToOneUcs4Char in jsstr.cpp ,overlong UTF-8 seqence detection problem';
     17 var status = '';
     18 var statusitems = [];
     19 var actual = '';
     20 var actualvalues = [];
     21 var expect =  '';
     22 var expectedvalues = [];
     23 var arg;
     24 /*
     25 * The patch for http://bugzilla.mozilla.org/show_bug.cgi?id=511859
     26 * defined this value to be the result of an overlong UTF-8 sequence -
     27 */
     28 
     29 var EX="(Exception thrown)";
     30 
     31 function getActual(s)
     32 {
     33  try {
     34    return decodeURI(s);
     35  } catch (e) {
     36    return EX;
     37  }
     38 }
     39 
     40 //Phase1: overlong sequences
     41 expect = EX;
     42 arg = "%C1%BF";
     43 status = "Overlong 2byte U+7f :" + arg;
     44 actual = getActual(arg);
     45 addThis();
     46 
     47 arg = "%E0%9F%BF";
     48 status = "Overlong 3byte U+7ff :" + arg;
     49 actual = getActual(arg);
     50 addThis();
     51 
     52 arg = "%F0%88%80%80";
     53 status = "Overlong 4byte U+8000 :" + arg;
     54 actual = getActual(arg);
     55 addThis();
     56 
     57 arg = "%F0%8F%BF%BF";
     58 status = "Overlong 4byte U+ffff :" + arg;
     59 actual = getActual(arg);
     60 addThis();
     61 
     62 arg = "%F0%80%C0%80%80";
     63 status = "Overlong 5byte U+20000 :" + arg;
     64 actual = getActual(arg);
     65 addThis();
     66 
     67 arg = "%F8%84%8F%BF%BF";
     68 status = "Overlong 5byte U+10FFFF :" + arg;
     69 actual = getActual(arg);
     70 addThis();
     71 
     72 arg = "%FC%80%84%8F%BF%BF";
     73 status = "Overlong 6byte U+10FFFF :" + arg;
     74 actual = getActual(arg);
     75 addThis();
     76 
     77 //Phase 2:Out of Unicode range
     78 arg = "%F4%90%80%80%80";
     79 status = "4byte 0x110000 :" + arg;
     80 actual = getActual(arg);
     81 addThis();
     82 arg = "%F8%84%90%80%80";
     83 status = "5byte 0x110000 :" + arg;
     84 actual = getActual(arg);
     85 addThis();
     86 
     87 arg = "%FC%80%84%90%80%80";
     88 status = "6byte 0x110000 :" + arg;
     89 actual = getActual(arg);
     90 addThis();
     91 
     92 //Phase 3:Valid sequences must be decoded correctly
     93 arg = "%7F";
     94 status = "valid sequence U+7F :" + arg;
     95 actual = getActual("%7F");
     96 expect = "\x7f";
     97 addThis();
     98 
     99 arg = "%C2%80";
    100 status = "valid sequence U+80 :" + arg;
    101 actual = getActual(arg);
    102 expect = "\x80";
    103 addThis();
    104 
    105 arg = "%E0%A0%80";
    106 status = "valid sequence U+800 :" + arg;
    107 actual = getActual("%E0%A0%80");
    108 expect = "\u0800";
    109 addThis();
    110 
    111 arg = "%F0%90%80%80"
    112 status = "valid sequence U+10000 :" + arg;
    113 actual = getActual(arg);
    114 expect = "\uD800\uDC00";
    115 addThis();
    116 
    117 arg = "%F4%8F%BF%BF";
    118 status = "valid sequence U+10FFFF :" + arg;
    119 actual = getActual(arg);
    120 expect = "\uDBFF\uDFFF";
    121 addThis();
    122 
    123 //-----------------------------------------------------------------------------
    124 test();
    125 //-----------------------------------------------------------------------------
    126 
    127 
    128 
    129 function addThis()
    130 {
    131  statusitems[UBound] = status;
    132  actualvalues[UBound] = actual;
    133  expectedvalues[UBound] = expect;
    134  UBound++;
    135 }
    136 
    137 
    138 function test()
    139 {
    140  printBugNumber(BUGNUMBER);
    141  printStatus(summary);
    142 
    143  for (var i=0; i<UBound; i++)
    144  {
    145    reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
    146  }
    147 }