intl/uconv/tests/unit/test_bug381412.Big5.js

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

Correct previous dual key logic pending first delivery installment.

     1 const charset = "Big5";
     3 function dumpStrings(inString, outString) {
     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 == 0) {
    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 }
    20 function error(inString, outString, msg){
    21     dumpStrings(inString, outString);
    22     do_throw("security risk: " + msg);
    23 }
    25 function run_test() {
    26     var ScriptableUnicodeConverter =
    27 	Components.Constructor("@mozilla.org/intl/scriptableunicodeconverter",
    28 			       "nsIScriptableUnicodeConverter");
    30     var converter = new ScriptableUnicodeConverter();
    31     converter.charset = charset;
    33     var leadByte, trailByte;
    34     var inString;
    35     for (leadByte = 1; leadByte < 0x100; ++leadByte) {
    36 	for (trailByte = 1; trailByte < 0x100; ++trailByte) {
    37 	    inString = String.fromCharCode(leadByte, trailByte, 65);
    38 	    var outString = converter.ConvertToUnicode(inString) + converter.Finish();
    39 	    switch (outString.length) {
    40 	        case 1:
    41 		    error(inString, outString, "2 byte sequence eaten");
    42 		    break;
    43 	        case 2:
    44 		    if (outString.charCodeAt(0) < 0x80 &&
    45 			outString.charCodeAt(1) < 0x80) {
    46 			error(inString, outString, "2 byte sequence converted to 1 ASCII");
    47 		    }
    48 		    break;
    49 	        case 3:
    50 		    if (outString != inString &&
    51 			outString.charCodeAt(0) < 0x80 &&
    52 			outString.charCodeAt(1) < 0x80) {
    53 			error(inString, outString,
    54 			      "2 byte sequence converted to 2 ASCII");
    55 		    }
    56 		    break;
    57 	    }
    58 	}
    59     }
    60 }

mercurial