1 const charset
= "hz-gb-2312";
3 function dumpStrings(inString
, outString
) {
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");
20 function error(inString
, outString
, msg
){
21 dumpStrings(inString
, outString
);
22 do_throw("security risk: " + msg
);
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
;
35 for (leadByte
= 1; leadByte
< 0x100; ++leadByte
) {
36 for (trailByte
= 1; trailByte
< 0x100; ++trailByte
) {
37 if (leadByte
== 0x7e) {
38 if (trailByte
== 0x7b ||
41 // ignore escape sequences:
42 // ~{ (sets HZ-GB mode)
48 inString
= String
.fromCharCode(leadByte
, trailByte
, 65);
49 var outString
= converter
.ConvertToUnicode(inString
) +
51 switch (outString
.length
) {
53 error(inString
, outString
, "2 byte sequence eaten");
56 if (outString
.charCodeAt(0) < 0x80 &&
57 outString
.charCodeAt(1) < 0x80) {
58 error(inString
, outString
,
59 "2 byte sequence converted to 1 ASCII");
63 if (outString
!= inString
&&
64 outString
.charCodeAt(0) < 0x80 &&
65 outString
.charCodeAt(1) < 0x80) {
66 error(inString
, outString
,
67 "2 byte sequence converted to 2 ASCII");