intl/uconv/tests/unit/test_bug601429.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/intl/uconv/tests/unit/test_bug601429.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,46 @@
     1.4 +// Tests whether characters above 0x7F decode to ASCII characters liable to 
     1.5 +// expose XSS vulnerabilities
     1.6 +load('CharsetConversionTests.js');
     1.7 +
     1.8 +function run_test() {
     1.9 +  var failures = false;
    1.10 +  var ccManager = Cc["@mozilla.org/charset-converter-manager;1"]
    1.11 +        .getService(Ci.nsICharsetConverterManager);
    1.12 +  var decodingConverter = CreateScriptableConverter();
    1.13 +
    1.14 +  var charsetList = ccManager.getDecoderList();
    1.15 +  var counter = 0;
    1.16 +  while (charsetList.hasMore()) {
    1.17 +    ++counter;
    1.18 +    var charset = charsetList.getNext();
    1.19 +    dump("testing " + counter + " " + charset + "\n");
    1.20 +      
    1.21 +    try {
    1.22 +      decodingConverter.charset = charset;
    1.23 +    } catch(e) {
    1.24 +      dump("Warning: couldn't set decoder charset to " + charset + "\n");
    1.25 +      continue;
    1.26 +    }
    1.27 +    for (var i = 0x80; i < 0x100; ++i) {
    1.28 +      var inString = String.fromCharCode(i);
    1.29 +      var outString;
    1.30 +      try {
    1.31 +	outString = decodingConverter.ConvertToUnicode(inString) +
    1.32 +	                decodingConverter.Finish();
    1.33 +      } catch(e) {
    1.34 +	outString = String.fromCharCode(0xFFFD);
    1.35 +      }
    1.36 +      for (var n = 0; n < outString.length; ++n) {
    1.37 +	var outChar = outString.charAt(n);
    1.38 +	if (outChar == '<' || outChar == '>' || outChar == '/') {
    1.39 +	  dump(charset + " has a problem: " + escape(inString) +
    1.40 +	       " decodes to '" + outString + "'\n");
    1.41 +	  failures = true;
    1.42 +	}
    1.43 +      }
    1.44 +    }
    1.45 +  }
    1.46 +  if (failures) {
    1.47 +    do_throw("test failed\n");
    1.48 +  }
    1.49 +}

mercurial