1 const charset
= "Shift_JIS";
3 function error(inString
, outString
, msg
){
7 for (i
= 0; i
< inString
.length
; ++i
) {
8 dispIn
+= " x" + inString
.charCodeAt(i
).toString(16);
10 if (outString
.length
== 0) {
13 for (i
= 0; i
< outString
.length
; ++i
) {
14 dispOut
+= " x" + outString
.charCodeAt(i
).toString(16);
17 dump("\"" + dispIn
+ "\" ==> \"" + dispOut
+ "\"\n");
18 do_throw("security risk: " + msg
);
22 var ScriptableUnicodeConverter
=
23 Components
.Constructor("@mozilla.org/intl/scriptableunicodeconverter",
24 "nsIScriptableUnicodeConverter");
26 var converter
= new ScriptableUnicodeConverter();
27 converter
.charset
= charset
;
29 var leadByte
, trailByte
;
31 for (leadByte
= 1; leadByte
< 0x100; ++leadByte
) {
32 for (trailByte
= 1; trailByte
< 0x100; ++trailByte
) {
33 inString
= String
.fromCharCode(leadByte
, trailByte
, 65);
34 var outString
= converter
.ConvertToUnicode(inString
) + converter
.Finish();
35 switch (outString
.length
) {
37 error(inString
, outString
, "2 byte sequence eaten");
40 if (outString
.charCodeAt(0) < 0x80 &&
41 outString
.charCodeAt(1) < 0x80) {
42 error(inString
, outString
, "2 byte sequence converted to 1 ASCII");
46 if (outString
!= inString
&&
47 outString
.charCodeAt(0) < 0x80 &&
48 outString
.charCodeAt(1) < 0x80) {
49 error(inString
, outString
,
50 "2 byte sequence converted to 2 ASCII");