tor-browser

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

test_bug715319.dbcs.js (1435B)


      1 // 2-byte charsets:
      2 const charsets = ["Big5", "EUC-KR"];
      3 const ScriptableUnicodeConverter = Components.Constructor(
      4  "@mozilla.org/intl/scriptableunicodeconverter",
      5  "nsIScriptableUnicodeConverter"
      6 );
      7 var gConverter;
      8 
      9 function error(inString, outString, msg) {
     10  var dispIn = "";
     11  var dispOut = "";
     12  var i;
     13  for (i = 0; i < inString.length; ++i) {
     14    dispIn += " x" + inString.charCodeAt(i).toString(16);
     15  }
     16  if (!outString.length) {
     17    dispOut = "<empty>";
     18  } else {
     19    for (i = 0; i < outString.length; ++i) {
     20      dispOut += " x" + outString.charCodeAt(i).toString(16);
     21    }
     22  }
     23  dump('"' + dispIn + '" ==> "' + dispOut + '"\n');
     24  do_throw("security risk: " + msg);
     25 }
     26 
     27 function IsASCII(charCode) {
     28  return charCode <= 0x7e;
     29 }
     30 
     31 function test(inString) {
     32  var outString = gConverter.ConvertToUnicode(inString) + gConverter.Finish();
     33 
     34  var outLen = outString.length;
     35 
     36  if (
     37    IsASCII(inString.charCodeAt(1)) &&
     38    (outLen < 4 || outString.charCodeAt(outLen - 4) == 0xfffd)
     39  ) {
     40    error(inString, outString, "ASCII input eaten in " + gConverter.charset);
     41  }
     42 }
     43 
     44 function run_test() {
     45  gConverter = new ScriptableUnicodeConverter();
     46  for (var i = 0; i < charsets.length; ++i) {
     47    gConverter.charset = charsets[i];
     48 
     49    var byte1, byte2;
     50    for (byte1 = 1; byte1 < 0x100; ++byte1) {
     51      for (byte2 = 1; byte2 < 0x100; ++byte2) {
     52        test(String.fromCharCode(byte1, byte2) + "foo");
     53      }
     54    }
     55  }
     56 }