tor-browser

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

test_bug381412.gb2312.js (1724B)


      1 const charset = "GB2312";
      2 
      3 function error(inString, outString, msg) {
      4  var dispIn = "";
      5  var dispOut = "";
      6  var i;
      7  for (i = 0; i < inString.length; ++i) {
      8    dispIn += " x" + inString.charCodeAt(i).toString(16);
      9  }
     10  if (!outString.length) {
     11    dispOut = "<empty>";
     12  } else {
     13    for (i = 0; i < outString.length; ++i) {
     14      dispOut += " x" + outString.charCodeAt(i).toString(16);
     15    }
     16  }
     17  dump('"' + dispIn + '" ==> "' + dispOut + '"\n');
     18  do_throw("security risk: " + msg);
     19 }
     20 
     21 function run_test() {
     22  var ScriptableUnicodeConverter = Components.Constructor(
     23    "@mozilla.org/intl/scriptableunicodeconverter",
     24    "nsIScriptableUnicodeConverter"
     25  );
     26 
     27  var converter = new ScriptableUnicodeConverter();
     28  converter.charset = charset;
     29 
     30  var leadByte, trailByte;
     31  var inString;
     32  for (leadByte = 1; leadByte < 0x100; ++leadByte) {
     33    for (trailByte = 1; trailByte < 0x100; ++trailByte) {
     34      inString = String.fromCharCode(leadByte, trailByte, 65);
     35      var outString = converter.ConvertToUnicode(inString) + converter.Finish();
     36      switch (outString.length) {
     37        case 1:
     38          error(inString, outString, "2 byte sequence eaten");
     39          break;
     40        case 2:
     41          if (
     42            outString.charCodeAt(0) < 0x80 &&
     43            outString.charCodeAt(1) < 0x80
     44          ) {
     45            error(inString, outString, "2 byte sequence converted to 1 ASCII");
     46          }
     47          break;
     48        case 3:
     49          if (
     50            outString != inString &&
     51            outString.charCodeAt(0) < 0x80 &&
     52            outString.charCodeAt(1) < 0x80
     53          ) {
     54            error(inString, outString, "2 byte sequence converted to 2 ASCII");
     55          }
     56          break;
     57      }
     58    }
     59  }
     60 }