diff -r 000000000000 -r 6474c204b198 intl/uconv/tests/unit/test_bug601429.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/intl/uconv/tests/unit/test_bug601429.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,46 @@ +// Tests whether characters above 0x7F decode to ASCII characters liable to +// expose XSS vulnerabilities +load('CharsetConversionTests.js'); + +function run_test() { + var failures = false; + var ccManager = Cc["@mozilla.org/charset-converter-manager;1"] + .getService(Ci.nsICharsetConverterManager); + var decodingConverter = CreateScriptableConverter(); + + var charsetList = ccManager.getDecoderList(); + var counter = 0; + while (charsetList.hasMore()) { + ++counter; + var charset = charsetList.getNext(); + dump("testing " + counter + " " + charset + "\n"); + + try { + decodingConverter.charset = charset; + } catch(e) { + dump("Warning: couldn't set decoder charset to " + charset + "\n"); + continue; + } + for (var i = 0x80; i < 0x100; ++i) { + var inString = String.fromCharCode(i); + var outString; + try { + outString = decodingConverter.ConvertToUnicode(inString) + + decodingConverter.Finish(); + } catch(e) { + outString = String.fromCharCode(0xFFFD); + } + for (var n = 0; n < outString.length; ++n) { + var outChar = outString.charAt(n); + if (outChar == '<' || outChar == '>' || outChar == '/') { + dump(charset + " has a problem: " + escape(inString) + + " decodes to '" + outString + "'\n"); + failures = true; + } + } + } + } + if (failures) { + do_throw("test failed\n"); + } +}