18
18
#line 16 "src/ngx_http_xss_util.rl"
19
19
20
20
#line 21 "src/ngx_http_xss_util.c"
21
+
static const char _javascript_key_offsets[] = {
22
+
0, 0, 6, 9, 11, 14, 18, 28
23
+
};
24
+
25
+
static const char _javascript_trans_keys[] = {
26
+
36, 95, 65, 90, 97, 122, 46, 48,
27
+
57, 48, 57, 93, 48, 57, 46, 93,
28
+
48, 57, 36, 46, 91, 95, 48, 57,
29
+
65, 90, 97, 122, 0
30
+
};
31
+
32
+
static const char _javascript_single_lengths[] = {
33
+
0, 2, 1, 0, 1, 2, 4, 0
34
+
};
35
+
36
+
static const char _javascript_range_lengths[] = {
37
+
0, 2, 1, 1, 1, 1, 3, 0
38
+
};
39
+
40
+
static const char _javascript_index_offsets[] = {
41
+
0, 0, 5, 8, 10, 13, 17, 25
42
+
};
43
+
44
+
static const char _javascript_trans_targs[] = {
45
+
6, 6, 6, 6, 0, 3, 5, 0,
46
+
4, 0, 7, 4, 0, 3, 7, 5,
47
+
0, 6, 1, 2, 6, 6, 6, 6,
48
+
0, 0, 0
49
+
};
50
+
21
51
static const int javascript_start = 1;
22
52
23
53
@@ -33,103 +63,77 @@ ngx_int_t ngx_http_xss_test_callback(u_char *data, size_t len)
33
63
pe = p + len;
34
64
35
65
36
-
#line 40 "src/ngx_http_xss_util.c"
66
+
#line 70 "src/ngx_http_xss_util.c"
37
67
{
38
68
cs = javascript_start;
39
69
}
40
70
41
-
#line 45 "src/ngx_http_xss_util.c"
71
+
#line 75 "src/ngx_http_xss_util.c"
42
72
{
73
+
int _klen;
74
+
const char *_keys;
75
+
int _trans;
76
+
43
77
if ( p == pe )
44
78
goto _test_eof;
45
-
switch ( cs )
46
-
{
47
-
st1:
48
-
if ( ++p == pe )
49
-
goto _test_eof1;
50
-
case 1:
51
-
switch( (*p) ) {
52
-
case 36: goto st6;
53
-
case 95: goto st6;
54
-
}
55
-
if ( (*p) > 90 ) {
56
-
if ( 97 <= (*p) && (*p) <= 122 )
57
-
goto st6;
58
-
} else if ( (*p) >= 65 )
59
-
goto st6;
60
-
goto st0;
61
-
st0:
62
-
cs = 0;
63
-
goto _out;
64
-
st6:
65
-
if ( ++p == pe )
66
-
goto _test_eof6;
67
-
case 6:
68
-
switch( (*p) ) {
69
-
case 36: goto st6;
70
-
case 46: goto st1;
71
-
case 91: goto st2;
72
-
case 95: goto st6;
79
+
if ( cs == 0 )
80
+
goto _out;
81
+
_resume:
82
+
_keys = _javascript_trans_keys + _javascript_key_offsets[cs];
83
+
_trans = _javascript_index_offsets[cs];
84
+
85
+
_klen = _javascript_single_lengths[cs];
86
+
if ( _klen > 0 ) {
87
+
const char *_lower = _keys;
88
+
const char *_mid;
89
+
const char *_upper = _keys + _klen - 1;
90
+
while (1) {
91
+
if ( _upper < _lower )
92
+
break;
93
+
94
+
_mid = _lower + ((_upper-_lower) >> 1);
95
+
if ( (*p) < *_mid )
96
+
_upper = _mid - 1;
97
+
else if ( (*p) > *_mid )
98
+
_lower = _mid + 1;
99
+
else {
100
+
_trans += (unsigned int)(_mid - _keys);
101
+
goto _match;
102
+
}
103
+
}
104
+
_keys += _klen;
105
+
_trans += _klen;
73
106
}
74
-
if ( (*p) < 65 ) {
75
-
if ( 48 <= (*p) && (*p) <= 57 )
76
-
goto st6;
77
-
} else if ( (*p) > 90 ) {
78
-
if ( 97 <= (*p) && (*p) <= 122 )
79
-
goto st6;
80
-
} else
81
-
goto st6;
82
-
goto st0;
83
-
st2:
84
-
if ( ++p == pe )
85
-
goto _test_eof2;
86
-
case 2:
87
-
if ( (*p) == 46 )
88
-
goto st3;
89
-
if ( 48 <= (*p) && (*p) <= 57 )
90
-
goto st5;
91
-
goto st0;
92
-
st3:
93
-
if ( ++p == pe )
94
-
goto _test_eof3;
95
-
case 3:
96
-
if ( 48 <= (*p) && (*p) <= 57 )
97
-
goto st4;
98
-
goto st0;
99
-
st4:
100
-
if ( ++p == pe )
101
-
goto _test_eof4;
102
-
case 4:
103
-
if ( (*p) == 93 )
104
-
goto st7;
105
-
if ( 48 <= (*p) && (*p) <= 57 )
106
-
goto st4;
107
-
goto st0;
108
-
st7:
109
-
if ( ++p == pe )
110
-
goto _test_eof7;
111
-
case 7:
112
-
goto st0;
113
-
st5:
114
-
if ( ++p == pe )
115
-
goto _test_eof5;
116
-
case 5:
117
-
switch( (*p) ) {
118
-
case 46: goto st3;
119
-
case 93: goto st7;
120
-
}
121
-
if ( 48 <= (*p) && (*p) <= 57 )
122
-
goto st5;
123
-
goto st0;
107
+
108
+
_klen = _javascript_range_lengths[cs];
109
+
if ( _klen > 0 ) {
110
+
const char *_lower = _keys;
111
+
const char *_mid;
112
+
const char *_upper = _keys + (_klen<<1) - 2;
113
+
while (1) {
114
+
if ( _upper < _lower )
115
+
break;
116
+
117
+
_mid = _lower + (((_upper-_lower) >> 1) & ~1);
118
+
if ( (*p) < _mid[0] )
119
+
_upper = _mid - 2;
120
+
else if ( (*p) > _mid[1] )
121
+
_lower = _mid + 2;
122
+
else {
123
+
_trans += (unsigned int)((_mid - _keys)>>1);
124
+
goto _match;
125
+
}
126
+
}
127
+
_trans += _klen;
124
128
}
125
-
_test_eof1: cs = 1; goto _test_eof;
126
-
_test_eof6: cs = 6; goto _test_eof;
127
-
_test_eof2: cs = 2; goto _test_eof;
128
-
_test_eof3: cs = 3; goto _test_eof;
129
-
_test_eof4: cs = 4; goto _test_eof;
130
-
_test_eof7: cs = 7; goto _test_eof;
131
-
_test_eof5: cs = 5; goto _test_eof;
132
129
130
+
_match:
131
+
cs = _javascript_trans_targs[_trans];
132
+
133
+
if ( cs == 0 )
134
+
goto _out;
135
+
if ( ++p != pe )
136
+
goto _resume;
133
137
_test_eof: {}
134
138
_out: {}
135
139
}
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4