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 +}