-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathbugGH2386.js
74 lines (63 loc) · 2.06 KB
/
bugGH2386.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft Corporation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
function toHexCP(c, cp) {
var hex = "0123456789abcdef";
return String.fromCharCode(hex.charCodeAt((c >> (cp * 4)) & 0xf));
}
function toHex(str) {
var result = "";
for(var i = 0; i < str.length; i++) {
var c = str.charCodeAt(i);
for (var cp = 3; cp >= 0; cp--) {
result += toHexCP(c, cp);
}
}
return "0x" + result;
}
var CHECK = function(h)
{
var hex_str = String.fromCharCode(h);
var pattern = eval("/" + hex_str + "/");
if (toHex(hex_str) != toHex(pattern.source)) {
throw new Error("String encoding has failed? "
+ toHex(hex_str) + " != " + toHex(pattern.source));
}
}
CHECK("0x0000");
CHECK("0x0080");
CHECK("0x0800");
CHECK("0xFF80");
CHECK("0xFFFD");
CHECK("0xFFFFFF");
CHECK("0xFFFFFF80");
CHECK("0xFFFFFF80FF");
function CHECK_EVAL(s)
{
var eval_s = new RegExp( s ).source;
if (s !== eval_s) throw new Error(
"String Encoding is broken ? ->" + s);
}
var CH1 = String.fromCharCode('0xe4b8ad');
var CH2 = String.fromCharCode('0xe69687');
var CH3 = String.fromCharCode('0xe336b2');
var CH4 = String.fromCharCode('0xe336b2aa');
var CHX = String.fromCharCode("0x80808080");
var BUFF = '';
for(var i = 0; i < 16; i++)
{
var str = CH1;
CHECK_EVAL(str + CHX + BUFF)
CHECK_EVAL(str + BUFF + CHX)
CHECK_EVAL(str + BUFF + CHX + '1')
str += BUFF + CH2 + CHX;
BUFF += '1';
CHECK_EVAL(str + '1' + CH3);
CHECK_EVAL(str + '12' + CH3);
CHECK_EVAL(str + '123' + CH3);
CHECK_EVAL(str + '1' + CH4);
CHECK_EVAL(str + '12' + CH4);
CHECK_EVAL(str + '123' + CH4)
}
console.log("PASS");